В начало

Собственная функция в Interbase

 

            В базе данных имеется таблица «Nakladnaya», заполненная значениями номенклатур.

            Необходимо написать и зарезервировать в «Interbase 6.5» свою функцию, которая выполняла бы операцию приведения к верхнему регистру строк таблицы.

Рис. 1. Таблица «Nakladnaya»

 

            Например, запрос с использованием стандартной SQL-функции «Upper» переведет в верхний регистр только слова, написанные латиницей, что как бы не совсем «комильфо», т.к. мы живем в России.

SELECT Upper(Nomenklatura)

FROM Nakladnaya;

 

Рис. 2. Результат работы функции «Upper»

 

            Чтобы создать нормальную, полноценную функцию обратимся к великому и могучему Дельфи.  И для начала напишем библиотеку с нужной нам функцией, которая будет переводить в верхний регистр все без разбору слова, каким бы алфавитом их не написали бы.

library Test;

uses SysUtils;

 

Function malloc(size: integer): Pointer; Cdecl; External 'msvcrt.dll';

 

Function StrUpperCase(sz: PChar): PChar; Cdecl;

Var Tmp: String;

Begin

   Tmp:=AnsiUpperCase(sz);

   Result:=malloc(length(Tmp) + 1);

   StrPCopy(Result, Tmp);

end;

 

Exports

    StrUpperCase;

begin

end.

Откомпилируем библиотеку, поместим в папку «C:\Program Files\Borland\InterBase\UDF» и зарегистрируем в «Interbase 6.5», точнее задекларируем.

DECLARE EXTERNAL FUNCTION MyAnsiUpper

cstring (254)

RETURNS cstring(254) FREE_IT

ENTRY_POINT 'StrUpperCase' MODULE_NAME 'Test.dll';

            Если код выполнился без ошибок,  можно начать проверять свою функцию «MyAnsiUpper». Пишем запросик:

SELECT MyAnsiUpper(Nomenklatura)

FROM Nakladnaya;

 

Рис. 3. Результат работы функции «MyAnsiUpper»

 

            Таким образом, собственная функция была задекларирована в «Interbase 6.5» и проверена. На рис. 3 видно, что в верхний регистр переведены все названия номенклатур, и те что на кириллице, и те что на латинице.