Запись в поле типа CLongBinary{BLOB] c использованием ODBC
От: Аноним  
Дата: 02.09.02 13:21
Оценка:
Подскажите пожалуйста, как записать произвольные данные в поле типа BLOB. Я использую ODBC и соответственно наследник CRecordset с полем "CLongBinary* m_pBinary;".
Желательно с примером кода.

Заранее благодарен!

Чтение данных предварительно туда записанных — без проблем.
void* p = ::GlobalLock(m_pBinary->m_hData);
// выполняем некоторые действия, например копируем в буффер
::GlobalUnlock(m_pBinary->m_hData);

А запись данных — облом
Предположим данные представленны в виде буффера(размер естественно озвестен)
Как мне произвести запись в поле

// Начинаем редактирование
pRecordset->Edit()

// Так у меня представлен буффер с новым значением
unsigned char* pBuffer;
long nBufferSize;

//
// ???
//

// Сохраняем изменения
pRecordset->Update()

Подскажите пожалуйста!!!
Меня интересует только вариант с использованием CRecordset и CLongBinary(можно и CByteArray, только покажите как его использовать.)
Re: Запись в поле типа CLongBinary{BLOB] c использованием OD
От: Аноним  
Дата: 02.09.02 13:24
Оценка:
Прошу прощения, мой адрес Tanatos@nm.ru
Заранее благодарен Всем кто откликнется!
Re: Запись в поле типа CLongBinary{BLOB] c использованием OD
От: _gis  
Дата: 05.09.02 07:28
Оценка:
Здравствуйте Аноним, Вы писали:

А>Подскажите пожалуйста, как записать произвольные данные в поле типа BLOB. Я использую ODBC и соответственно наследник CRecordset с полем "CLongBinary* m_pBinary;".



Меня мучает точно такая же проблема
Зайя в pRecordset->Update() я увидел следующее:
Вот функции которые вызываются:

CRecordset::Update()
CRecordset::UpdateInsertDelete()
CRecordset::BuildUpdateSQL()

так вот, в CRecordset::BuildUpdateSQL() формируется запрос на Insert/Update где BLOB-поле отсутствует напрочь , в принципе логично. Думаю, либо надо перед этим что — то делать с recordset'ом, либо копать надо в другом месте. Все больше склоняюсь к мысли, что придется писать на чистом API СУБД'шки, хотя не хочется.
С уважением, Сергей.
Re: Запись в поле типа CLongBinary{BLOB] c использованием OD
От: kiamor  
Дата: 25.03.03 13:36
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Подскажите пожалуйста, как записать произвольные данные в поле типа BLOB. Я использую ODBC и соответственно наследник CRecordset с полем "CLongBinary* m_pBinary;".


Нашел решение-то? В MSDN есть TN045, где указано как работать с CLongBinary полями. Делается просто.
С помощью тех же ::GlobalAlloc/::GlobalLock выделяешь и заполняешь блок памяти. Цепляешь его к
CLongBinary::m_hData. Ставишь размеры и все. Можешь даже после update'а не освобождать. CRecordset
после выборки новой записи или при уничтожении сам позаботится об очистке.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.