Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.07.04;
Скачать: [xml.tar.bz2];

Вниз

Если 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.004 c
3-9728
Макс
2002-06-11 16:18
2002.07.04
Изменение даты и времени одновременно ...


7-10022
slipery
2002-04-08 10:51
2002.07.04
HellP!!! Как узнать информацию ожелезе?!


6-9950
konrads
2002-04-22 07:53
2002.07.04
Сетевой трафик


6-9954
Doom
2002-04-20 20:22
2002.07.04
Ну не получается по-нормальному проверить инет !!!


14-9990
Dark
2002-06-03 19:00
2002.07.04
Декомпиляция программы.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский