![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
InterBase&BLOB [D5, IB5.x]
Patrick © (2002-06-04 09:22:00)Подскажите, пожалуйста, каким образом добавлять новую строку в поле типа BLOB в тексте хранимой процедуры (имеется ввиду, что в поле BLOB уже какая-то информация присутствует), я пробовал использовать курсор для добавления в BLOB поле, как описано в документации по IB,
declare aaa cursor for insert blob history into complect;
open aaa
и т.д.
система выдает ошибку, что выражение ааа не известно.
Какие еще есть варианты?
Digitman (2002-06-04 10:11:00) [1]Вот пример UDF, записывающей в BLOB-строку
function StringToBlob(Value: PChar; Blob: PBlob): PBlob; cdecl;
exports
StringToBlob;
...
function InternalPutBlob(Blob: PBlob; Buffer: Pointer; Size: Integer): ULong;
var
BytesToWrite: Integer;
begin
Result:= 0;
if Assigned(Blob) then with Blob^ do
if Assigned(BlobHandle) and Assigned(PutSegment) then while (Size > 0) do begin
BytesToWrite:= Min(DefaultBlobSegmentSize, Size);
PutSegment(BlobHandle, PChar(Buffer) + Result, BytesToWrite);
Dec(Size, BytesToWrite);
Inc(Result, BytesToWrite);
end;
end;
function StringToBlob(Value: PChar; Blob: PBlob): PBlob;
begin
Result:= Blob;
if Assigned(Result) and Assigned(Value) then
with Result^ do
try
if Assigned(BlobHandle) and Assigned(PutSegment) then
InternalPutBlob(Result, Value, StrLen(Value) + 1)
else
Result:= nil;
except
Result:= nil;
end;
end;
DECLARE EXTERNAL FUNCTION STRINGTOBLOB
CSTRING(32767),
BLOB
RETURNS PARAMETER 2
ENTRY_POINT "StringToBlob" MODULE_NAME "myudf.dll";
пример вызова в BeforeInsert-триггере :
new.blobfield = StringToBlob("СТРОКА", new.blobfield);
Digitman (2002-06-04 10:00:00) [2]Только в UDF.
Читай внимательно док-цию по IB от производителя (например, LangRef.pdf). В каждом топике против каждой языковой конструкции стоит примечание : available in. Далее следует одна или более фраза из следующих : SQL, DSQL, ISQL. В SP/View/триггерах допустим SQL-синтаксис только ISQL. А в ISQL никаких курсоров и в помине нет.
Alexandr (2002-06-04 09:33:00) [3]UDF надо заюзать