Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.04;
Скачать: CL | DM;

Вниз

Если BLOB является выходным параметром UDF   Найти похожие ветки 

 
Patrick ©   (2002-06-13 09:11) [0]

Посоветуйте, please, каким образом вызывать UDF в запросе, если BLOB является выходным параметром UDF.

Например:
Исходный текст UDF:

function StrBlob(sz: PChar; SrcBlob: PBlob; var DstBlob :PBlob): PBlob; cdecl; export;
begin
result := SrcBlob;
DstBlob := SrcBlob;
if (not Assigned(SrcBlob)) or
(not Assigned(SrcBlob^.BlobHandle)) then exit;
SrcBlob^.PutSegment(SrcBlob^.BlobHandle, sz, StrLen(sz));
DstBlob := SrcBlob;
result := SrcBlob;
end;

Кстати описывать в Delphi этот фрагмент нужно как процедуру, или как функцию.


Описание UDF:
DECLARE EXTERNAL FUNCTION ADDTOBLOB
CSTRING(32767),
BLOB
RETURNS PARAMETER 2
ENTRY_POINT "StrBlob" MODULE_NAME "FreeUDFLib.dll";

Каким образом вызывать данную функцию в запросе на изменение?

update complect
set note = addtoblob("New String",?????? ) ???????????????
where code = 0

варианты
update complect
set note = addtoblob("New String", note, note )
where code = 0
и
update complect
set note = addtoblob("New String", note)
where code = 0
я убирал третий параметр в исходнике UDF.


 
Digitman ©   (2002-06-13 11:03) [1]

1. UDF всегда должна быть декларирована и реализована во внешней UDF-библиотеке как функция.

2. Вызов UDF из тела SP/триггера/View всегда должен быть оформлен как вызов ф-ции.

3. Если UDF возвращает BLOB, то результат в ISQL-скрипте декларации такой UDF должен быть описан как "returns parameter LAST", где LAST - номер последнего входного параметра в числе прочих вх.параметров объявления UDF. Последним параметром, разумеется, д.б. BLOB-параметр (равно как и в самом тексте декларации и реализации UDF в UDF-модуле).

3. Если UDF возвращает BLOB, то в строчке вызова UDF из тела SP/триггера/View последний паараметр указывать не нужно : IB самостоятельно (неявно) создаст и передаст его в UDF.

Правильно сделать в твоем примере будет так :


function StrBlob(sz: PChar; DstBlob :PBlob): PBlob; cdecl; export;
begin
Result := DstBlob;
if Assigned(DstBlob) and Assigned(DstBlob.BlobHandle)
and and Assigned(DstBlob.PutSegment) then
Result.PutSegment(DstBlob.BlobHandle, sz, StrLen(sz));
end;

DECLARE EXTERNAL FUNCTION ADDTOBLOB
CSTRING(32767),
BLOB
RETURNS PARAMETER 2
ENTRY_POINT "StrBlob" MODULE_NAME "FreeUDFLib.dll";

update complect
set note = ADDTOBLOB("New String") /* только первый вх.параметр указвыается, второй IB создаст и подставит сам */
where code = 0




 
Patrick ©   (2002-06-13 11:14) [2]

Many Thanks!!!



Страницы: 1 вся ветка

Текущий архив: 2002.07.04;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.014 c
1-9885
S@shka
2002-06-22 13:01
2002.07.04
Как сделать преостановку в работе программы


4-10044
MK
2002-05-03 17:19
2002.07.04
Окно свойств файла(ов) как в проводнике


1-9797
Shrek
2002-06-24 00:31
2002.07.04
Формы без 3D. Нет обёмных кнопок.


1-9813
jenbbond
2002-06-24 10:20
2002.07.04
FreeReport


3-9720
Corte ™
2002-06-11 12:07
2002.07.04
Может кто нить знает как организовать контекстный поиск в гриде