Delphi 3 и создание приложений баз данных

       

Пример создания DLL с несколькими UDF и объявления их в БД


Создадим DLL с именем 'UDF_DLL', в состав которой входят три функции:

library udf_dll;

uses

SysUtils,

Classes;

type

TIBDateTime = record

Days,

MSecIO : Cardinal;

end;

PInteger = ^Integer;

// функция усекает ведущие и хвостовые пробелы у строкового // значения, передаваемого как параметр function TrimChar(InString : PChar) : PChar; cdecl; export;

begin



Result := PChar(Trim(AnsiString(InString)));

end;

//функция возвращает (по значению) номер дня передаваемой в качестве параметра даты

function Den(var InDate : TIBDateTime) : Integer; cdecl; export;

var DT : TDateTime;

Gd,Ms,Dn : Word;

begin

DT := InDate.Days - 15018 + InDate.MSecIO / (MSecsPerDay * 10);

DecodeDate(DT,Gd,Ms,Dn) ;

Result := Integer(Dn);

end;

//функция возвращает (по ссылке) номер месяца передаваемой в качестве параметра даты

function Mes(var InDate : TIBDateTime) : PInteger; cdecl; export;

var DT : TDateTime;

Gd,Ms,Dn : Word;

R : Integer;

begin

DT := InDate.Days - 15018 + InDate.MSecIO / (MSecsPerDay * 10);

DecodeDate(DT,Gd,Ms,Dn);

R := Ms;

Result := @R;

end;

exports

TrimChar,

Den,

Mes;

begin

end.

После генерации модуля UDF_DLL.DLL переместим его в подкаталог BIN каталога на диске, в котором расположен сервер InterBase. Затем объявим функции в БД:

DECLARE EXTERNAL FUNCTION TRIMCHAR CSTRING(256)

RETURNS CSTRING(256)

ENTRY_POINT "TrimChar"

MODULE_NAME "udf_dll";

DECLARE EXTERNAL FUNCTION DEN DATE

RETURNS INTEGER BY VALUE

ENTRY_POINT "Den"

MODULE_NAME "udf_dll";

DECLARE EXTERNAL FUNCTION MES DATE

RETURNS INTEGER

ENTRY_POINT "Mes"

MODULE_NAME "udf_dll";

Примеры использования объявленных в БД функций пользователя в операторе SELECT:

SELECT TRIMCHAR (POKUP) || ' ' II GOROD

FROM POKUPATELI

SELECT *

FROM RASHOD

WHERE DEN(DAT_RASH) > 10;



Содержание раздела