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 ^; CREATE TRIGGER "CAL_DIA" FOR "PRUEBA" ACTIVE BEFORE INSERT POSITION 0AS BEGIN NEW.DIA_SEMANA = DiaSemana(NEW.FECHA); END ^ COMMIT WORK ^SET TERM;^
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
Ir a la versión completa