[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