Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сохранение содержимого BLOB-поля в XML

7.4K
06 марта 2007 года
Gole
31 / / 31.10.2005
Всем привет.
Собственно сабж. Есть база FireBird, в одной из таблиц которой содержится блоб поле. Не подскажет ли кто-то как грамотно перенести его содержимое в ХМЛ.
Пробовал такой вот код:
 
Код:
xmlChild = xmlParent->AddChild("bases:enterpriseMap");

   TBlobField *bf = dynamic_cast<TBlobField *>(xmlDataSet->FieldByName("FILE_CONTENT"));
   TMemoryStream *stream = new TMemoryStream;
   bf->SaveToStream(stream);
   xmlChild->SetNodeValue( stream );
   delete stream;


Но вместо ожидаемого блоба туда заносится просто значение true...
Как быть?
1.9K
06 марта 2007 года
SABROG
242 / / 26.01.2006
Логично. Blob поле - двоичные данные. Конверть их в Hex или Mime с заменой спец символов и тогда уже сохраняй.
7.4K
07 марта 2007 года
Gole
31 / / 31.10.2005
А нельзя ли поконкретней как это организовать?
1.9K
07 марта 2007 года
SABROG
242 / / 26.01.2006
Код:
char buffer[255];
int a = 0xdeadbeef;
int b = 0x0badc0de;
wsprintf(buffer,"0x%x 0x%x",a,b);
MessageBox(0,buffer,0,MB_OK);
int buffer2[2] = {0xdeadbeef,0x0badc0de};
char buffer3[255];
TMemoryStream *strm1 = new TMemoryStream;
TMemoryStream *strm2 = new TMemoryStream;
strm1->WriteBuffer(buffer2,sizeof(buffer2));
NMUUProcessor1->InputStream = strm1;
NMUUProcessor1->OutputStream = strm2;
NMUUProcessor1->Encode();
strm2->ReadBuffer(buffer3,(int)strm2->Size);
ShowMessage(AnsiString(buffer3));
7.4K
09 марта 2007 года
Gole
31 / / 31.10.2005
Спасибо, SABROG.
Немного изменил код в перерасчете на XML.
Если кому-то понадобится, вот пример того, что вышло.
Код:
xmlChild = xmlParent->AddChild("bases:someXMLfield");
TBlobField *bf = dynamic_cast<TBlobField *>(xmlDataSet->FieldByName("FILE_CONTENT"));
TMemoryStream *in_stream = new TMemoryStream;
TMemoryStream *out_stream = new TMemoryStream;
bf->SaveToStream(in_stream);

TNMUUProcessor *coder = new TNMUUProcessor(NULL);
coder->InputStream = in_stream;     //входящий поток, содержит первозданную информацию блоба
coder->OutputStream = out_stream;   //исходящий поток, принимает кодированое содержимое блоба
coder->Encode();  //собственно само кодирование
TStringList *pSL = new TStringList;
pSL->LoadFromStream( out_stream );  //загрузка текста из потока

xmlChild->SetText( pSL->Text );
1.9K
09 марта 2007 года
SABROG
242 / / 26.01.2006
Еще TBlobStream глянь, может удасться сократить код.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог