Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Readme.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
377.86 Кб
Скачать

6.Примеры обращения к функциям Библиотеки

«Объяснение принципов помогает думать. Примеры учат обезьянничать», поэтому, несмотря на название раздела, приводятся все-таки, по возможности, принципы. Кроме того, примеры вызовов функций можно посмотреть и в соответствующих файлах примеров.

Уместное и важное замечание, т.к. общение с функциями Библиотеки идет через указатели на нуль-терминальные строки, то распределением памяти (и уничтожением) должно заниматься вызывающее приложение, т.е. на вас как программисте лежит ответственность за своевременное выделение и освобождение памяти при вызове функций Библиотеки. Функции Библиотеки не распределяют и не освобождают память необходимую для возврата результатов своих преобразований. Возвращаемый основными функциями параметр, помимо всего прочего, сообщает об этом: хватило или нет предоставленного буфера для размещения результата склонения переданной строки. Например, «Иванов Иван Иванович» является строкой из 20 символов, то для преобразования в творительный падеж «Ивановым Иваном Ивановичем» понадобится уже 26 символов. При выделении памяти под результат (pResult) необходимо это учитывать.

6.1.Delphi

Перед обращением к функциям DLL необходимо выбрать тип линковки – статическая или динамическая.

Статическая линковка.

Объявляется библиотечная функция:

function GetFIOPadegFSAS(pFIO: PChar; nPadeg: LongInt; pResult: PChar; var

nLen: LongInt):Integer; stdcall; external

'PadegUC.dll' Name 'GetFIOPadegFSAS';

После этого можно к ней обратиться. Примерно так:

function MakePadeg(cFIO: String; nPadeg: Integer): String;

var

tmpS : PChar;

nLen : LongInt;

RetVal : Integer;

begin

Result := '';

nLen := Length(cFIO) + 10; // размер буфера под результат преобразования

tmpS := StrAlloc(nLen); // распределение памяти под результат

try

RetVal := GetFIOPadegFSAS(PChar(cFIO), nPadeg, tmpS, nLen);

// проверим возвращенное значения.

if RetVal=-1 then

ShowMessage('Недопустимое значение падежа - ' + IntToStr(nPadeg))

else

Result := Copy(tmpS, 1, nLen);

finally

StrDispose(tmpS); // освобождение выделенной памяти

end;

end;

Динамическая линковка.

Сначала объявляем переменные:

var

DllHandle : HMODULE;

GetPadeg : function(pFIO: PChar; nPadeg: LongInt; pResult: PChar;

var nLen: LongInt): Integer; stdcall;

затем, допустим, при создании формы:

procedure TForm1.FormCreate(Sender: TObject);

begin

DllHandle := LoadLibrary('PadegUC.dll'); // допускается ипользование файла PadegUCA.dll

if DllHandle <> 0 then

@GetPadeg := GetProcAddress(DllHandle, 'GetFIOPadegFSAS')

else begin

MessageBox(0, 'Не найдена динамическая Библиотека PadegUC.dll'+#10+#13+

'Функции склонения недоступны.',

'Предупреждение',

MB_OK + MB_ICONEXCLAMATION + MB_TASKMODAL);

btnDecl.Enabled := False; // обращение к DLL из обработчика этой кнопки

end;

end;

и обработчик события:

procedure TForm1.btnDeclClick(Sender: TObject);

var

pResult : PChar;

nLen, i : Integer;

begin

if Assigned(GetPadeg) then begin

nLen := Length(edFIO.Text) + 10;

pResult := StrAlloc(nLen);

try

i := GetPadeg(PChar(edFIO.Text), rgCase.ItemIndex+1, pResult, nLen);

if i = 0 then Edit2.Text := StrPas(pResult)

else Edit2.Text := IntToStr(i); // при ошибке покажем код

finally

StrDispose(pResult);

end;

end;

end;

здесь: edFIO - TEdit, содержащий ФИО для склонения; rgCase - TRadioGroupe в которой задается нужный падеж;

ну и, наконец:

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

FreeLibrary(DllHandle);

end;

Приведеные решения можно оформлены в виде интерфейсного модуля padegFIO.pas, отвечающего за работу с DLL. Именно такой подход использован при разработке примера (каталог Sample\Delphi), входящего в комплект поставки. Вы можете использовать данные модули в собственных проектах (Delphi XE и выше).

Начиная в версии 4.0 в примерах для Delphi есть вызов функций Библиотеки с использованием сервера автоматизации SampleCom.dpr (Sample\DelphiCom).

Для знакомства c примерами вызова просим смотреть исходники, т.к. использование сервера автоматизации проще чем динамическая линковка, к тому же иногда картинка заменит тысячу слов.

6.2.C/C++

Для обзора возможностей библиотечных функций создадим консольный проект на Microsoft Visual C++.

Рассмотрим динамическую загрузку функций Библиотеки.

// подключим необходимые модули

#include "stdafx.h"

#include <windows.h>

#include <iostream.h>

HINSTANCE hDLL; // хендл Библиотеки DLL

// объявления используемых функций

typedef int (__stdcall *LPFNGetFIOPadegAS)(unsigned char *,unsigned char *, unsigned char *, int, unsigned char *, int &);

LPFNGetFIOPadegAS lpfnGetFIOPadegAS; // указатель на функцию

typedef int (__stdcall *LPFNGetFullAppointmentPadeg)(unsigned char *, unsigned char *, int, unsigned char *, int &);

LPFNGetFullAppointmentPadeg lpfnGetFullAppointmentPadeg;

// и само тело

void main()

{

// загружаем Библиотеку с указанием пути к ней (или без пути, если использовались приведенные выше рекомендации)

hDLL=LoadLibrary("PadegUC.dll");

if(hDLL==NULL) // ошибка загрузки Библиотеки

{

cout << "Unable to load library!" << endl;

return;

}

// получим указатель на нашу функцию

lpfnGetFIOPadegAS=(LPFNGetFIOPadegAS)GetProcAddress(hDLL, "GetFIOPadegAS");

if( lpfnGetFIOPadegAS==NULL )

{

cout << "Unable to load function(s)." << endl;

FreeLibrary(hDLL);

return;

}

// и для примера возьмем известного русского

char *cpLastName, *cpFirstName, *cpMiddleName;

char cResult[200]; // буфер для результата

cpLastName="Иванов";

cpFirstName="Иван";

cpMiddleName="Иванович";

iLen=200;

// указываем фамилию, имя, отчество, падеж и куда поместить результат

iParam=lpfnGetFIOPadegAS((unsigned char *) cpLastName, (unsigned char *) cpFirstName,(unsigned char *)cpMiddleName, 5, (unsigned char *)cResult, iLen);

cout << cResult << endl; // на выходе видим “Ивановым Иваном Ивановичем”

// аналогично просклоняем должность и отдел

lpfnGetFullAppointmentPadeg=(LPFNGetFullAppointmentPadeg)GetProcAddress(hDLL, "GetFullAppointmentPadeg");

if( lpfnGetFullAppointmentPadeg==NULL )

{

cout << "Unable to load function GetFullAppointmentPadeg" << endl;

FreeLibrary(hDLL);

return;

}

// только теперь, для разнообразия, укажем размер входящих буферов

char cAppointment[100], cOffice[100];

iLen=200;

strcpy(cAppointment,"инженер-программист");

strcpy(cOffice, "отдел информационных технологий");

iParam=lpfnGetFullAppointmentPadeg((unsigned char *)cAppointment, (unsigned char *)cOffice, 5, (unsigned char *)cResult, &iLen);

// на выходе "инженером-программистом отдела информационных технологий"

cout << cResult << endl;

FreeLibrary(hDLL); // освобождаем память

}

Еще в комплекте представлен пример работы с Библиотекой на C++ Builder, См. каталог \Sample\CPP Builder.

6.3.VB/VBA

Предлагаемая версия программы совместима с продуктами Microsoft Office 97/2000/XP и выше.

Ниже приводятся примеры объявления библиотечных функций GetFIOPadegFSAS и GetNominativePadeg, а также глобальной функции MakePadeg (см. файл Example.xls) в Microsoft Office 2010 для 4 версии Библиотеки.

' Функция склонения ФИО с автоматическим определением пола по отчеству

Private Declare PtrSafe Function GetPadeg Lib "PadegUC.dll" Alias "GetFIOPadegFSAS" _

(ByVal pFIO As String, ByVal nPadeg As Long, ByVal pResult As String, ByRef nLen As Long) As Integer

' Функция восстановления именительного падежа

Private Declare PtrSafe Function GetNominativePadeg Lib "PadegUC.dll" _

(ByVal pFIO As String, ByVal pResult As String, ByRef nLen As Long) As Integer

' Функция преобразования cFIO в падеж nPadeg

Public Function MakePadeg(ByVal cFIO As String, ByVal nPadeg As Long) As String

Dim tmpS As String

Dim nLen As Long

Dim RetVal As Integer

nLen = 255

tmpS = String(nLen, 0)

RetVal = GetPadeg(StrConv(cFIO, vbUnicode), nPadeg, tmpS, nLen) ' с переводом ASC - Unicode

tmpS = StrConv(tmpS, vbFromUnicode) ' перевод в Unicode - ASC

If RetVal = -1 Then MsgBox "Недопустимое значение падежа - " & "(" & nPadeg & ")", , "Склонение ФИО"

MakePadeg = Mid(tmpS, 1, nLen)

End Function

' Функция восстановления именительного падежа

Public Function Nominative(ByVal cFIO As String) As String

Dim tmpS As String

Dim nLen As Long

Dim RetVal As Integer

nLen = 255

tmpS = String(nLen, 0)

RetVal = GetNominativePadeg(StrConv(cFIO, vbUnicode), tmpS, nLen) ' с переводом ASC - Unicode

tmpS = StrConv(tmpS, vbFromUnicode) ' перевод в Unicode - ASC

Nominative = Mid(tmpS, 1, nLen)

End Function

Как видно из кода, реализация функции MakePadeg предусматривает вывод пре­дупреждения с указанием неправильного значения падежа при некорректном его зада­нии. Обращение к остальным функциям DLL производится аналогично.

Для выполнения операций склонения в приложениях Microsoft Word и Microsoft Excel в поставку версии 3.X включены макросы, основой которых является функция MakePadeg. Указанные макросы находятся в файлах MacroWrd.bas и MacroExl.bas для MS Word и MS Excel, соответственно. Кроме того, в поставку входит шаблон Справка.dot с несколько модифицированной функцией MakePadeg. Поместите его в ка­талог "\Program Files\Microsoft Office\Шаблоны" или другой, содержащий шаблоны для MS Office. Создайте документ на основе этого шаблона ("Пуск->Создать документ Microsoft Office"). Ввод ФИО получателя справки и вставка в текст ФИО в нужном па­деже производится с помощью панели инструментов "Ввод ФИО для справки".

Приведенные макросы и функции могут использоваться как сами по себе, так и при разработке собственных программ.

Так как версия 4 полностью поддерживает строки Unicode, то при передаче и воз­врате значений функций Библиотеки следует перед обращением преобразовать строки VBA в Unicode, что и показано в приведенном примере (функция StrConv()):

RetVal = GetPadeg(StrConv(cFIO, vbUnicode), nPadeg, tmpS, nLen) ' с переводом ASC - Unicode

tmpS = StrConv(tmpS, vbFromUnicode) ' перевод в Unicode - ASC

6.4.Firebird

Собрать отдельную библиотеку для Firebird вынудили разные соглашения о вызовах (cdecl для Firebird и stdcall в PadegUC.dll), а также желание избавиться от паразитных параметров (pResult и nLen) в PadegUC.dll, использующихся в VB/VBA.

В данной сборке в основном возможно использование библиотеки в базах созданных в различных базовых кодировках (WIN1251 и UTF8), функции будут корректно принимать и возвращать значения в кодировке базы данных ориентируясь на тип кодировки строкового входного параметра. В некоторых функциях нет возможно опреджелдить тип кодировки выходного значения, в этом случае функция возвращает строки в UTF8, это следует помнить в случае применения Библиотеки для БД созданной в базовой кодировке WIN1251 и явно объявлять кодировку выходного парвметра (CHARACTER SET UTF8). Ниже в таблице для таких функций есть пометка «возврат CHARACTER SET UTF8».

Реализованы следующие функции (для более подробного описания см. лписания функций в разделе 5):

DECLCURRENCY

Cклонение числового значения (1) валюты (2) в указанный падеж (3) и вывод в указанной форме (4). Возврат CHARACTER SET UTF8.

DECLNUMERAL

Функция склонения строкового числительного. Возврат CHARACTER SET UTF8.

Параметры:

1 - строковое числительнoе в именительном падеже, результат использования одной из предыдущих функций NumberToString, SumInWords или DoubleToVerbal;

2 - пребуемый падеж (1..6);

пол (-1 – средний, 0 – женский. 1 – мужской)

3 - если установлено (true) порядковое иначе количественное (отсутсвие или присутсивеи дробной части соответсвенно);

4 - если установлено (true) одушевленное иначе неодушевленное.

Примеры вызова:

select DeclNumeral(DOUBLETOVERBAL(1.6), 5, 1, 0, 0)

from rdb$database

select DeclNumeral(SUMINWORDS(1.618, 1, 2, 1, 1), 5, 1, 0, 0)

from rdb$database

DOUBLETOVERBAL

Простое представление числа прописью. Возврат CHARACTER SET UTF8.

GETAPPOINTMENTPADEG

Склонение должности. Параметры должность, падеж.

GETDICTIONARY

Получение полного имени словаря исключений (возврат CHARACTER SET UTF8). Без входных параметров.

GETFIOPADEG

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

Входные параметры: отдельно фимилия, имя, отчество в именительном падеже, пол(1 - мужчина, 0 - женщина), падеж.

GETFIOPADEGFSAS

Склонение ФИО с автоматическим определением рода (пола). Параметры ФИО, падеж

GETFIPADEGFS

Склонение фамилии и имени записанных одной строкой.

Параметры ФИО, род (1 - мужчина, 0 - женщина), падеж.

GETFULLAPPOINTMENTPADEG

Склонение наименования должности (1-й параметр) и подразделения (2-й параметр) в падеже заданным третьим параметром.

GETNOMINATIVEPADEG

Функция восстановления именительного падежа. Входной параметр ФИО в склонении, выход: ФИО в именительном падеже.

GETOFFICEPADEG

Склонение подразделения. Параметры подразделение, падеж.

GET_SEX

Определение пола по ФИО (отчеству). Параметры ФИО. Возвращает 1 - "М", 0 - "Ж".

NUMBERTOSTRING

Функция преобразования числа в строковый эквивалент (возврат CHARACTER SET UTF8).

Параметры:

1 - число для преобразования переданного как строка для увеличения к-ва значащих цифр;

2 - род (-1 (средн.), 0 (жен.), 1(муж.));

3 - к-во цифр в дробной части: 0-нет;

4 - удалять "лишние" нули в дробной части;

5 - преобразовывать дробную часть.

SETDICTIONARY

Установка и загрузка нового словаря исключений. Входной параметр полное имя словаря исключений. Возвращает успех - 1, неудача - 0.

SUMINWORDS

Функция преобразования числа в строковый эквивалент (возврат CHARACTER SET UTF8), аналог NumberToString.

Параметры:

число для преобразования (тип double);

род (-1 (средн.), 0 (жен.), 1(муж.));

к-во цифр в дробной части: 0-нет;

удалять "лишние" нули в дробной части;

преобразовывать дробную часть.

UPDATEEXCEPTIONS

Выполняет перезагрузку словаря исключений. Возвращает значения: 1 - успешное, 0 - ошибка.

Скрипт объявления функций библиотеки:

/*************************************************************************/

/*** Generated by IBExpert 2015.1.13.1 12.05.2015 ***/

/*************************************************************************/

SET SQL DIALECT 3;

SET NAMES UTF8;

/*************************************************************************/

/*** User defined functions (UDF) ***/

/*************************************************************************/

DECLARE EXTERNAL FUNCTION DECLCURRENCY

NUMERIC(18,4),

CSTRING(10),

INTEGER,

INTEGER

RETURNS CSTRING(500) CHARACTER SET UTF8

ENTRY_POINT 'DeclCurrency' MODULE_NAME 'PadegFB';

DECLARE EXTERNAL FUNCTION DECLNUMERAL

CSTRING(50),

INTEGER,

INTEGER,

INTEGER,

INTEGER

RETURNS CSTRING(500) CHARACTER SET UTF8

ENTRY_POINT 'DeclNumeral' MODULE_NAME 'PadegFB';

DECLARE EXTERNAL FUNCTION DOUBLETOVERBAL

DOUBLE PRECISION

RETURNS CSTRING(500) CHARACTER SET UTF8

ENTRY_POINT 'DoubleToVerbal' MODULE_NAME 'PadegFB';

DECLARE EXTERNAL FUNCTION GETAPPOINTMENTPADEG

CSTRING(500),

INTEGER

RETURNS CSTRING(500)

ENTRY_POINT 'GetAppointmentPadeg' MODULE_NAME 'PadegFB';

DECLARE EXTERNAL FUNCTION GETDICTIONARY

RETURNS CSTRING(500) CHARACTER SET UTF8

ENTRY_POINT 'GetDictionary' MODULE_NAME 'PadegFB';

DECLARE EXTERNAL FUNCTION GETFIOPADEG

CSTRING(200),

CSTRING(200),

CSTRING(200),

INTEGER,

INTEGER

RETURNS CSTRING(500)

ENTRY_POINT 'GetFIOPadeg' MODULE_NAME 'PadegFB';

DECLARE EXTERNAL FUNCTION GETFIOPADEGFS

CSTRING(200),

INTEGER,

INTEGER

RETURNS CSTRING(200)

ENTRY_POINT 'GetFIOPadegFS' MODULE_NAME 'PadegFB';

DECLARE EXTERNAL FUNCTION GETFIOPADEGFSAS

CSTRING(200),

INTEGER

RETURNS CSTRING(200)

ENTRY_POINT 'GetFIOPadegFSAS' MODULE_NAME 'PadegFB';

DECLARE EXTERNAL FUNCTION GETFIPADEGFS

CSTRING(500),

INTEGER,

INTEGER

RETURNS CSTRING(500)

ENTRY_POINT 'GetFIPadegFSU8' MODULE_NAME 'PadegFB';

DECLARE EXTERNAL FUNCTION GETFULLAPPOINTMENTPADEG

CSTRING(500),

CSTRING(500),

INTEGER

RETURNS CSTRING(1000)

ENTRY_POINT 'GetFullAppointmentPadeg' MODULE_NAME 'PadegFB';

DECLARE EXTERNAL FUNCTION GETNOMINATIVEPADEG

CSTRING(500)

RETURNS CSTRING(500)

ENTRY_POINT 'GetNominativePadeg' MODULE_NAME 'PadegFB';

DECLARE EXTERNAL FUNCTION GETOFFICEPADEG

CSTRING(500),

INTEGER

RETURNS CSTRING(500)

ENTRY_POINT 'GetOfficePadeg' MODULE_NAME 'PadegFB';

DECLARE EXTERNAL FUNCTION GET_SEX

CSTRING(200)

RETURNS INTEGER BY VALUE

ENTRY_POINT 'Get_Sex' MODULE_NAME 'PadegFB';

DECLARE EXTERNAL FUNCTION NUMBERTOSTRING

CSTRING(50),

INTEGER,

INTEGER,

INTEGER,

INTEGER

RETURNS CSTRING(500) CHARACTER SET UTF8

ENTRY_POINT 'NumberToString' MODULE_NAME 'PadegFB';

DECLARE EXTERNAL FUNCTION SETDICTIONARY

CSTRING(200)

RETURNS INTEGER BY VALUE

ENTRY_POINT 'SetDictionary' MODULE_NAME 'PadegFB';

DECLARE EXTERNAL FUNCTION SUMINWORDS

DOUBLE PRECISION,

INTEGER,

INTEGER,

INTEGER,

INTEGER

RETURNS CSTRING(500) CHARACTER SET UTF8

ENTRY_POINT 'SumInWords' MODULE_NAME 'PadegFB';

DECLARE EXTERNAL FUNCTION UPDATEEXCEPTIONS

RETURNS INTEGER BY VALUE

ENTRY_POINT 'UpdateExceptions' MODULE_NAME 'PadegFB';

/*************************************************************************/

/*** Descriptions ***/

/*************************************************************************/

DESCRIBE FUNCTION DECLCURRENCY

'Cклонение числового значения (1) валюты (2) в указанный падеж (3) и вывод в указанной форме (4).';

DESCRIBE FUNCTION DECLNUMERAL

'Функция склонения строкового числительного.

Параметры:

1 - строковое числительнoе в именительном падеже, результат использования одной из предыдущих функций NumberToString, SumInWords или DoubleToVerbal;

2 - пребуемый падеж (1..6);

пол (-1 – средний, 0 – женский. 1 – мужской)

3 - если установлено (true) порядковое иначе количественное (отсутсвие или присутсивеи дробной части соответсвенно);

4 - если установлено (true) одушевленное иначе неодушевленное.

Примеры вызова:

select DeclNumeral(DOUBLETOVERBAL(1.6), 5, 1, 0, 0)

from rdb$database

select DeclNumeral(SUMINWORDS(1.618, 1, 2, 1, 1), 5, 1, 0, 0)

from rdb$database';

DESCRIBE FUNCTION DOUBLETOVERBAL

'Представление числа прописью.';

DESCRIBE FUNCTION GETAPPOINTMENTPADEG

'Склонение должности. Параметры должность, падеж.';

DESCRIBE FUNCTION GETDICTIONARY

'Получение полного имени словаря исключений (возврат CHARACTER SET UTF8). Без входных параметров.';

DESCRIBE FUNCTION GETFIOPADEG

'Функция склонения фамилии, имени, отчества, из именительного падежа в любой другой падеж.

Входные параметры: отдельно фимилия, имя, отчество в именительном падеже, пол(1 - мужчина, 0 - женщина), падеж.';

DESCRIBE FUNCTION GETFIOPADEGFS

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

Входные параметры: ФИО в именительном падеже, пол(1 - мужчина, 0 - женщина), падеж.';

DESCRIBE FUNCTION GETFIOPADEGFSAS

'Склонение ФИО с автоматическим определением рода (пола). Параметры ФИО, падеж';

DESCRIBE FUNCTION GETFIPADEGFS

'Склонение фамилии и имени(см. GETIFPADEGFS, там имени и фамилии), записанных одной строкой.

Параметры ФИО, род (1 - мужчина, 0 - женщина), падеж.';

DESCRIBE FUNCTION GETFULLAPPOINTMENTPADEG

'Склонение наименования должности (1-й параметр) и подразделения (2-й параметр) в падеже заданным третьим параметром.';

DESCRIBE FUNCTION GETNOMINATIVEPADEG

'Функция восстановления именительного падежа. Входной параметр ФИО в склонении, выход: ФИО в именительном падеже';

DESCRIBE FUNCTION GETOFFICEPADEG

'Склонение подразделения. Параметры подразделение, падеж';

DESCRIBE FUNCTION GET_SEX

'Определение пола по ФИО (отчеству). Параметры ФИО. Возвращает 1 - "М", 0 - "Ж"';

DESCRIBE FUNCTION NUMBERTOSTRING

'Функция преобразования числа в строковый эквивалент (возврат CHARACTER SET UTF8).

Параметры:

число для преобразования переданного как строка для увеличения к-ва значащих цифр;

род (-1 (средн.), 0 (жен.), 1(муж.));

к-во цифр в дробной части: 0-нет;

удалять "лишние" нули в дробной части;

преобразовывать дробную часть.';

DESCRIBE FUNCTION SETDICTIONARY

'Установка и загрузка нового словаря исключений. Входной параметр полное имя словаря исключений. Возвращает успех - 1, неудача - 0.';

DESCRIBE FUNCTION SUMINWORDS

'Функция преобразования числа в строковый эквивалент (возврат CHARACTER SET UTF8), аналог NumberToString.

Параметры:

число для преобразования (тип double);

род (-1 (средн.), 0 (жен.), 1(муж.));

к-во цифр в дробной части: 0-нет;

удалять "лишние" нули в дробной части;

преобразовывать дробную часть.';

DESCRIBE FUNCTION UPDATEEXCEPTIONS

'Выполняет перезагрузку словаря исключений. Возвращает значения: 1 - успешное, 0 - ошибка.';

В итоге вы можете использовать такие запросы:

select e.fio, getfiopadegfsas(e.fio, 2) as fio_padeg2, getfiopadegfsas(e.fio, 5) as fio_padeg5

from employee e

Вот с такими результатами

FIO

FIO_PADEG2

FIO_PADEG5

Давыдов Денис Олегович

Давыдова Дениса Олеговича

Давыдовым Денисом Олеговичем

Пакшан Геннадий Евгеньевич

Пакшана Геннадия Евгеньевича

Пакшаном Геннадием Евгеньевичем

Труфанов Виталий Николаевич

Труфанова Виталия Николаевича

Труфановым Виталием Николаевичем

Соколов Николай Константинович

Соколова Николая Константиновича

Соколовым Николаем Константиновичем

Старшова Ольга Владимировна

Старшовой Ольги Владимировны

Старшовой Ольгой Владимировной

СЕМЕНОВ МИХАИЛ НИКОЛАЕВИЧ

Семенова Михаила Николаевича

Семеновым Михаилом Николаевичем

Шарафутдинова Фарида Ильгизаровна

Шарафутдиновой Фариды Ильгизаровны

Шарафутдиновой Фаридой Ильгизаровной

Васильев Александр Викторович

Васильева Александра Викторовича

Васильевым Александром Викторовичем

Борисов Андрей Валерьевич

Борисова Андрея Валерьевича

Борисовым Андреем Валерьевичем

Володина Марина Евгеньевна

Володиной Марины Евгеньевны

Володиной Мариной Евгеньевной

,,,

,,,

,,,

База PADEG.FDB (кодировка ANSI) содержит болrее 2 000 фамилий, их можно использовать для экспериментов.

База PADEG_UTF.FDB (кодировка UTF8) предназначена для тестов.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]