[firebase-br] UDF's
Euler Jr.
euler em siginformatica.com.br
Qui Set 22 17:28:42 -03 2005
É recomendável que vc gerencie todos seus ponteiros dinâmicamente
(alocação dinâmica). Como suas funções operam sobre ponteiros utilize as
funções de alocação disponível no Delphi (New, StrAlloc, etc).
Obviamente efetuando a "coleta de lixo" depois.
[]s
Euler Jr.
Marcos Thomaz (Prog_CPD) escreveu:
> Pessoal, aproveitando os códigos de algumas UDF's já existentes, fiz uma UDF
> assim:
>
> //Arquivo uTiposAuxiliares
> type
> TDateRec = record
> Year: SmallInt;
> Month: SmallInt;
> Day: SmallInt;
> end;
>
> TTimeRec = record
> Hour: SmallInt;
> Minute: SmallInt;
> Second: SmallInt;
> end;
>
> TTSRec = record
> Date: TDateRec;
> Time: TTimeRec;
> end;
>
> TFBDate = integer;
> TFBTime = Cardinal;
>
> { FireBird TimeStamp record }
> TFBTS = packed record
> Date: TFBDate;
> Time: TFBTime;
> end;
>
> PFBTS = ^TFBTS;
>
> function DateRec(const Year, Month, Day: SmallInt): TDateRec;
> function FBDecDate(T: TFBDate): TDateRec;
>
> implementation
>
> function DateRec(const Year, Month, Day: SmallInt): TDateRec;
> begin
> Result.Year := Year;
> Result.Month := Month;
> Result.Day := Day;
> end;
>
> function FBDecDate(T: TFBDate): TDateRec;
> var
> Century, Y, M, D: integer;
> begin
> T := T - (1721119 - 2400001);
> Century := (4 * T - 1) div 146097;
> T := 4 * T - 1 - 146097 * Century;
> D := T div 4;
> T := (4 * D + 3) div 1461;
> D := 4 * D + 3 - 1461 * T;
> D := (D + 4) div 4;
> M := (5 * D - 3) div 153;
> D := 5 * D - 3 - 153 * M;
> D := (D + 5) div 5;
> Y := 100 * Century + T;
>
> if M < 10 then
> M := M + 3
> else begin
> M := M - 9;
> Y := Y + 1;
> end;
>
> Result.Year := Y;
> Result.Month := M;
> Result.Day := D;
> end;
>
>
> //Código fonte da DLL
> library MyFBUDF;
>
> uses
> SysUtils,
> Classes,
> Math,
> uTiposAuxiliares in 'uTiposAuxiliares.pas';
>
> {$R *.res}
>
> function UDF_ANOMESS(ret:PChar;T: PFBTS)cdecl; export;
> var
> MesI,AnoI:SmallInt;
> MesS,AnoS:String;
> begin
> MesI := FBDecDate(T^.Date).Month;
> AnoI := FBDecDate(T^.Date).Year;
> MesS := IntToStr(MesI);
> if MesI < 10 then
> MesS := '0'+MesS;
> AnoS := IntToStr(AnoI);
> StrPCopy( Ret , AnoS+MesS );
> end;
>
> exports
> UDF_ANOMESS;
> begin
> end.
>
>
>
> Ela registra no IBExpert legal, mas quando vou usá-la, ela dá um erro louco,
> me retornando a grid em branco, e em seguida, simplesmente trava o IBExpert.
> O que tem de errado??
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
Mais detalhes sobre a lista de discussão lista