Как сохранить BLOB поле в *.XML файл

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
SAV
Сообщения: 54
Зарегистрирован: 19 авг 2006, 17:59

Как сохранить BLOB поле в *.XML файл

Сообщение SAV » 20 авг 2006, 15:24

Никак не получается с помощю IBClientDataSet сохранить в закэшированную в *.xml табличку BLOB поле. Подскажите как сделать,а то завис на этом уже неприлично долго :-( ?

Код следующий:
//---------------------------------------------------------------------
IBClientDataSet1->LoadFromFile("c:\\qwer.xml");

IBClientDataSet1->Insert();

IBClientDataSet1->FieldByName("ID")->AsInteger = 40;
TIBBlobStream *strm=(TIBBlobStream *)IBClientDataSet1->CreateBlobStream(IBClientDataSet1->FieldByName("MBLOB"),bmReadWrite);
strm->Mode = bmReadWrite;// почему то при создании не включается ??
strm->LoadFromFile("c:\\temp1.bmp");//ВОТ ТУТ ОШИБКА ВЫВАЛИВАЕТСЯ "Stream read error"!!!!!!
IBClientDataSet1->Post();

IBClientDataSet1->SaveToFile("c:\\qwer.xml",dfXML);
IBClientDataSet1->Close();
strm->Free();
//---------------------------------------------------------------------
Таблица:
CREATE TABLE TABLE1 (
ID INTEGER,
MBLOB BLOB SUB_TYPE 0 SEGMENT SIZE 4096
);

Использую FB1.53+IBX6.08(Builder6)

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 20 авг 2006, 15:41

Не надо заниматься приведением типов там, где это не надо.
С каких пор CDS возвращает TIBBlobStream ?
Разберись зачем нужны разные типы TxxxBlobStream, кто их может вернуть и зачем

SAV
Сообщения: 54
Зарегистрирован: 19 авг 2006, 17:59

Re: Как сохранить BLOB поле в *.XML файл

Сообщение SAV » 20 авг 2006, 15:43

Отбой сам разобрался :-).

IBClientDataSet1->LoadFromFile("c:\\qwer.xml");
IBClientDataSet1->Open();
IBClientDataSet1->Insert();
IBClientDataSet1->FieldByName("ID")->AsInteger = 40;
((TBlobField*)IBClientDataSet1->FieldByName("MBLOB"))->LoadFromFile("c:\\temp1.bmp");
IBClientDataSet1->Post();
IBClientDataSet1->SaveToFile("c:\\qwer.xml",dfXML);
IBClientDataSet1->Close();

Ответить