• Martes 30 de Abril de 2024, 04:41

Autor Tema:  Udf  (Leído 1958 veces)

Isnel

  • Miembro activo
  • **
  • Mensajes: 29
    • Ver Perfil
Udf
« en: Martes 16 de Mayo de 2006, 16:07 »
0
Necesito una función que me devuelva el día de la la semana de una fecha dada, hice esta DLL
Código: Text
  1. library IBExt;
  2.  
  3. uses
  4.   SysUtils,
  5.   Classes;
  6.  
  7. {$R *.res}
  8.  
  9. Type
  10.  TIBDate = Record
  11.     Day: LongInt;
  12.     Frac: LongInt;
  13.  end;
  14.  
  15. function DiaSemana(var Date: TIBDate): SmallInt; cdecl;
  16. begin
  17.  Result := Date.Day mod 7 + 4;
  18. end;
  19.  
  20. exports
  21.   DiaSemana;
  22. begin
  23. end.
  24.  
  25.  

Luego la uso dentro de un Trigger para probarla

Código: Text
  1. CREATE TABLE "PRUEBA"
  2. (
  3.   "FECHA"  DATE,
  4.   "DIA_SEMANA"  SMALLINT
  5. );
  6. SET TERM ^&#59;
  7.  
  8.  
  9.  
  10. CREATE TRIGGER "CAL_DIA" FOR "PRUEBA"
  11. ACTIVE BEFORE INSERT POSITION 0
  12. AS
  13.   BEGIN
  14.          NEW.DIA_SEMANA = DiaSemana(NEW.FECHA);
  15.   END
  16.  ^
  17.  
  18. COMMIT WORK ^
  19. SET TERM&#59;^
  20.  

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
  1.  
  2.  TIBDate = Record
  3.     Day: LongInt;
  4.     Frac: LongInt;
  5.  end;
  6.  
  7.  

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

  • Miembro activo
  • **
  • Mensajes: 29
    • Ver Perfil
Re: Udf
« Respuesta #1 en: Miércoles 17 de Mayo de 2006, 18:19 »
0
YA SE LO QUE PASA. HAY QUE DECLARAR EL PARAMETRO DE RETORNO POR VALOR

Código: Text
  1. DECLARE EXTERNAL FUNCTION DIASEMANA
  2. DATE
  3. RETURNS SMALLINT BY VALUE
  4. ENTRY_POINT 'DiaSemana' MODULE_NAME 'IBExt.dll';
  5.  
  6.