[firebase-br] RES: Dúvida UDF com parâmetro de data nulo

Priscila Lugon priscila em agriness.com
Sex Jan 15 11:09:23 -03 2010


Desculpa Robson, mas não entendi direito o que você quis dizer.

Eu já tentei testar se o parâmetro é diferente de "nil", mas não funcionou.
Como o tipo do parâmetro na DLL é um "PISC_QUAD", eu não sei como trabalhar
com esse tipo, ele sempre retorna que é diferente de "nil", mesmo que eu
passe um valor null ao chamar a UDF no Firebird. Também não sei se dar para
usar outro tipo no parâmetro, mas todos os exemplos que achei na internet
que usava uma data na UDF, eles usavam esse PISC_QUAD ao escrever a DLL.

Att. 

Priscila Lugon
Tecnologia
----------------------------------------------------------------------------
-------------------------------
AGRINESS – Gestão da Informação para Suinocultura 
www.agriness.com |  + 55 (48) 3028-0015 |   priscila em agriness.com
----------------------------------------------------------------------------
-------------------------------

-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Robson Catunda
Enviada em: sexta-feira, 15 de janeiro de 2010 10:51
Para: FireBase
Assunto: Re: [firebase-br] Dúvida UDF com parâmetro de data nulo

E com a data também. Basta gravar do tipo Date.
E pra testar se é nulo:

if valor_tipo_data is null then

2010/1/15 Priscila Lugon <priscila em agriness.com>

> Pessoal,
>
>
>
> Estou migrando um sistema em Access para o Firebird e tinha uma função que
> era muito usada no Access (Format) e que não existe no Firebird.
>
>
>
> Em virtude disso, criei duas UDFs para atender essa minha necessidade:
>
> - FormatFloat([campo double],[string de formatação]) = string com o valor
> formatado
>
> - FormatDateTime([data],[string de formatação]) = string com a data
> formatada
>
>
>
> Mas como não sou experiente nisso, criei as UDF baseado em materiais que
> achei na internet, só que na função “FormatDateTime “ eu não consegui
> verificar se o campo de Data que veio no parâmetro é nulo ou não, nos
> exemplos que achei na internet, nenhum fazia essa verificação. Já para a
> função “FormatFloat” que o parâmetro é um campo Double, eu consegui achar
o
> método que trata isso.  Alguém sabe como fazer isso para a data também?
>
>
>
> É que se não fizer esse tratamento para a data, e porventura, alguém
chamar
> essa função passando uma data nula, o campo retornado traz uma string com
> uma data lixo e eu gostaria que retornasse vazio ou nulo.
>
>
>
> Segue o código das duas funções:
>
>
>
> function FormatDate(ib_date: PISC_QUAD; sz: PChar): PChar; cdecl; export;
>
> var
>
>  s: string;
>
>  Data: TDateTime;
>
> begin
>
>  s := string(sz);
>
>  Data := isc_decode_TDateTime(ib_date);
>
>  StrPCopy(result, FormatDateTime(s,Data));
>
> end;
>
>
>
>
>
> function isc_decode_TDateTime(const Src: PISC_QUAD): TDateTime;
>
> begin
>
>  Result := Src^.gds_quad_high - 15018;
>
>  try
>
>    Result := Result + EncodeTime((Src^.gds_quad_low div (36000000)),
>
>      (Src^.gds_quad_low div (600000)) mod 60,
>
>      (Src^.gds_quad_low div (10000)) mod 60,
>
>      (Src^.gds_quad_low mod (10000)) div 10);
>
>  except
>
>    Result := Result + 0;
>
>  end;
>
> end;
>
>
>
> function FormatFloat(val1: PParamDsc; sz: PChar): PChar; cdecl; export;
>
> var
>
>  v1: Double;
>
>  s: string;
>
> begin
>
>  if (val1 = nil) or ((val1^.dsc_flags and DSC_null) <> 0) then
>
>  begin
>
>    result := nil;
>
>    Exit;
>
>  end;
>
>  s := string(sz);
>
>  get_double_type(val1, v1);
>
>  StrPCopy(result, SysUtils.FormatFloat(s,v1));
>
> end;
>
>
>
>
>
> Priscila Lugon
>
> Tecnologia
>
>
>
----------------------------------------------------------------------------
> -------------------------------
>
> AGRINESS – Gestão da Informação para Suinocultura
>
>
>
<blocked::file:///C:\Documents%20and%20Settings\usuario\Dados%20de%20aplicat
> ivos\Microsoft\Signatures\www.agriness.com> www.agriness.com |( + 55 (48)
> 3028-0015 | *  <mailto:priscila em agriness.com> priscila em agriness.com
>
>
>
----------------------------------------------------------------------------
> -------------------------------
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista