![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Возможно глупый вопрос, как сохранить данные из blob-поля в... [D7, IB6.x]
HMT © (2004-07-12 15:19:00)Как сохранить из blob-поля в файл или stream.
Johnmen (2004-07-13 13:37:00) [1]>Такого метода нет у TBlobStream
А кто говорил про TBlobStream?
ocean (2004-07-13 13:30:00) [2]
> B.SaveToFile('c:\blob.bin');
Такого метода нет у TBlobStream
vv_fran (2004-07-12 16:23:00) [3]из FAQ:как работать с BLOB?
Достаточно просто. Даже если вы указываете подтип блоба (sub_type), серверу все равно, что вы будете там хранить - текст, картинку или звук.
Для чтения и записи в конкретной библиотеке доступа обязательно есть поток (TStream) типа TBlobStream, TIBBlobStream и т.п. Например, сохранить содержимое столбца blob в файл можно таким образом:
procedure TForm1.Button1Click(Sender: TObject);
var B: TIBBlobStream;
begin
B:=IBDataSet1.CreateBlobStream(IBDataSet1.FieldByName('BLB') as TBlobField, bmRead);
B.SaveToFile('c:\blob.bin');
B.Free;
end;
Практически то же самое - при записи, однако тут есть два варианта:
1. передача blob через параметр:
IBQuery1.ParamByName('blb').asBlob:=blobvar;
обратите внимание что asBlob принимает значение в виде простой строки. Действительно, строки в последних версиях Delphi могут содержать любую, в т.ч. двоичную информацию. Поэтому значение параметру blob можно присваивать и как asString.
2. изменение столбца "редактируемого" DataSet:
IBDataSet1.Edit;
B:=IBDataSet1.CreateBlobStream(IBDataSet1.FieldByName('BLB') as TBlobField, bmWrite);
B.LoadFromFile('c:\blob.bin');
B.Free;
IBDataSet1.Post;
Обратите внимание, что метод B.Free вызывается перед вызовом IBDataSet1.Post.
Также, вопреки документации, давно (по крайней мере в версии IB 4.0 и выше) можно спокойно передавать и принимать blob как параметры процедуры. Существует, однако, обязательное условие - поскольку blob это дисковая структура, записываемый blob должен быть сохранен в столбце таблицы (insert/update), а считываемый blob должен быть выбран из таблицы (хотя можно из из функции чтения blob, например LoadBlobFromFile из UDFDEMO).
Для работы с blob на сервере можно использовать UDF например из FreeUDFLib.