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

Priscila Lugon priscila em agriness.com
Sex Jan 15 10:28:06 -03 2010


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

----------------------------------------------------------------------------
-------------------------------

 




Mais detalhes sobre a lista de discussão lista