Bases de Datos > InterBase/Firebird

 Udf

(1/1)

Isnel:
Necesito una función que me devuelva el día de la la semana de una fecha dada, hice esta DLL

--- Código: Text ---library IBExt; uses  SysUtils,  Classes; {$R *.res} Type TIBDate = Record    Day: LongInt;    Frac: LongInt; end; function DiaSemana(var Date: TIBDate): SmallInt; cdecl;begin Result := Date.Day mod 7 + 4;end; exports  DiaSemana;beginend.  
Luego la uso dentro de un Trigger para probarla


--- Código: Text ---CREATE TABLE "PRUEBA" (  "FECHA"  DATE,  "DIA_SEMANA"  SMALLINT);SET TERM ^&#59;   CREATE TRIGGER "CAL_DIA" FOR "PRUEBA" ACTIVE BEFORE INSERT POSITION 0AS  BEGIN         NEW.DIA_SEMANA = DiaSemana(NEW.FECHA);  END ^ COMMIT WORK ^SET TERM&#59;^ 
Pero cuando intento insertar un campo a la tabla Prueba se produce un error y se pierde la conexión con la BD. Tengo la sensación que el problema está en como InterBase representa el tipo de dato "Date", tal vez esté incorrecta la representación

--- Código: Text ---  TIBDate = Record    Day: LongInt;    Frac: LongInt; end;  
Si alguien sabe como se hace, o tiene algunas DLL que resuelvan este problema, ruego me ayuden

(Estoy usando Delphi Enterprice 7 y el Interbase que viene con él)

Isnel:
YA SE LO QUE PASA. HAY QUE DECLARAR EL PARAMETRO DE RETORNO POR VALOR


--- Código: Text ---DECLARE EXTERNAL FUNCTION DIASEMANADATERETURNS SMALLINT BY VALUE ENTRY_POINT 'DiaSemana' MODULE_NAME 'IBExt.dll';  

Navegación

[0] Índice de Mensajes

Ir a la versión completa