(думаю с подфорумом не ошибся, но если что - не бейте)
я пишу на VC++6 , и юзаю базу типа *.FDB или *.GDB из VC посредством Firebird 1.5
в таблице objects есть поле picture с сами понимаете чем.
если картинка BMP уже есть в таблице, то я читаю её -
(тут код на c++, если кому-то нужно, в смысле - точнее понять, о чём я, я толком не могу объяснить

НЕКАЯ ПРОЦЕДУРА()
{
CRecordset rs(&m_base);
// m_base - это объект CDataBase подключенный к открытой базе
CDBVariant var;
CString txt,sql;
sql="SELECT picture FROM objects WHERE nomer=3";
DWORD dwdDataLen;
BYTE* pbyData;
try
{
//запуск SQL
rs.Open(CRecordset::snapshot,sql,CRecordset::readOnly);
rs.GetFieldValue((short)0,var);
//длина BLOB
dwdDataLen=var.m_pbinary->m_dwDataLength;
if(dwdDataLen<2000000)
{
DWORD read=0;
//достаюм данные - суть файл формата BMP
//(проверил по хексам)
var.m_pbinary->m_hData;
pbyData =(BYTE*) GlobalLock(var.m_pbinary->m_hData);
//pbyData - буфер с файлом BMP в ОЗУ
if(pbyData)
{
BITMAPFILEHEADER* pBmpFileHeader;
BITMAPINFOHEADER* pBmpInfoHeader;
BITMAPINFO* pBmpInfo;
pBmpFileHeader=(BITMAPFILEHEADER*)pbyData;
pBmpInfoHeader=(BITMAPINFOHEADER*)(pbyData+sizeof(BITMAPFILEHEADER));
pBmpInfo=(BITMAPINFO*)pbyData;
BYTE* pPixels=pbyData+((BITMAPFILEHEADER*)pbyData)->bfOffBits;
CBitmap Bmp;
BOOL res=Bmp.CreateBitmap(30,30,1,24,pPixels);
CDC* pdc;
pdc=GetDC();
pdc->FillSolidRect(100,100,30,30,RGB(255,0,0));
res=pdc->DrawState(CPoint(100,100),CSize(30,30),&Bmp,DSS_NORMAL,0);
res=Bmp.DeleteObject();
ReleaseDC(pdc);
GlobalUnlock(var.m_pbinary->m_hData);
}
}
rs.Close();
}
catch(...)
{
::AfxMessageBox("ОШИБКА");
}
}
--------
проблемы дальше - как всё-таки считать, изменить и записать BLOB при помощи SQL , который (SQL) я могу запустить by
CString sql="INSERT .... ";
rs.Open(CRecordset::snapshot, sql ,CRecordset::readOnly);
-----------
ещё - слышал я об волшебном препроцессоре gpre.exe, который может по параметру -CXX выцеплять из текстового сишного файла команду
EXEC SQL
sql;
и заменять вызовами API
- расскажите, как это сделать, я не смог...
---------------------------------------------------------------------------------
ЗЫ
спасибо заранее