Как читать BLOBы из поля базы??
читаю в CDBVariant.m_pbinary методом CRecordset::GetFieldValue с SQL_C_BINARY...
Чтоб посмотреть что прочитал, пишу в файл
file.Write(CDBVariant.m_pbinary->m_hData, CDBVariant.m_pbinary->m_dwDataLength);
В итоге получаю всякую фигню - то ли не оттуда читаю, то ли пишу не туда...
А вообще у меня задача прочитать и вывести на экран картинку....
Вобщем, помогите разобраться - а то у меня проект стоит..
Пробывал использовать RFX - то же самое=((
А ты попробуй вообще классы типа CDataBase и CRecordset не использовать. Все тоже самое можно сделать через ODBC SDK. Будет немного сложнее но зато гибкость появится
SQLCHAR ConnStrOut[MAXBUFLEN];
SQLSMALLINT cbConnStrIn = 0;
SQLSMALLINT cbConnStrOut = 0;
SQLCHAR ConnStrIn[MAXBUFLEN] = "DRIVER={SQL Server};SERVER=WEB;UID=sa;PWD=;DATABASE=WEBLINK;";
SQLSMALLINT ConnStrInLength = strlen("DRIVER={SQL Server};SERVER=WEB;UID=sa;PWD=;DATABASE=WEBLINK;");
hdbc = SQL_NULL_HDBC;
// Allocate environment handle
retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
// Set the ODBC version environment attribute
retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
// Allocate connection handle
retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
// Connect to data source
retcode = SQLDriverConnect (hdbc,NULL , ConnStrIn , ConnStrInLength, ConnStrOut,
MAXBUFLEN, &cbConnStrOut, SQL_DRIVER_NOPROMPT);
}
}
}
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
SQLDisconnect(hdbc);
}
Vmesto CRecordser.
потому что ты используешь не адрес блока а адрес виндового хандлера блока памяти, когда пишешь в файл. используй GlobalLock для того чтобы получить адрес памяти.