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

Robson Catunda robson.catunda em gmail.com
Sex Jan 15 10:45:28 -03 2010


Vc precisa gravar o valor já formatado?
Eu salvo como numeric e formato a visualização no delphi como precisar.

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
>



Mais detalhes sobre a lista de discussão lista