Страница 1 из 1

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

Добавлено: 20 авг 2006, 15:24
SAV
Никак не получается с помощю 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)

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

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

Добавлено: 20 авг 2006, 15:43
SAV
Отбой сам разобрался :-).

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();