Главная страница
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.017 c
1-9920
[BAD]Angel
2002-06-23 12:54
2002.07.04
Люди, помогите ПЛЗ!!!!


1-9884
Dimedrol
2002-06-20 15:30
2002.07.04
Как раскрасить слова в МЕМО ?


7-10021
SerVS - S
2002-04-05 16:43
2002.07.04
Код выхода из программы


3-9690
zx
2002-06-10 09:43
2002.07.04
FreeReport 2.3


8-9930
Rurik
2002-02-27 15:27
2002.07.04
как хранить в ImageList каритинкиразных размеров ?