ODBC处理Image字段
在VC中使用CDBVariant变量存放image字段。先在CRecordset中执行select语句选出image
字
段(此处report字段为image类型)。以下为部分代码:
//读取
CDBVariant dbvt;
myrec.GetFieldValue("report",dbvt,SQL_C_BINARY);
char *f;
f=(char*)GlobalLock(dbvt.m_pbinary->m_hData);
//以下为读取文件
FILE* p=fopen("re_temp2","wb");
for(int i=0;i<(int)dbvt.m_pbinary->m_dwDataLength;i++)
fwrite(&f[i],1,1,p);
fclose(p);
GlobalUnlock(dbvt.m_pbinary->m_hData);
myrec.Close();
//保存
FILE * p=fopen("re_temp","rb");
HGLOBAL gm;
gm=GlobalAlloc(GMEM_MOVEABLE,1024*1024);
char *f;
f=(char *)GlobalLock(gm);
long i=0;
do{
fread(&f[i],1,1,p);
i++;
}while(!feof(p));
fclose(p);
GlobalUnlock(gm);
CGenRecord myrec(mydb);
//mydb为指向CDatabase的指针,定义一个数据库连接
//CGenRecord重载CRecord类,指向含image字段的表
myrec.m_strFilter="rName='"+m_rName;
myrec.m_strFilter+="'";
myrec.Open(CRecordset::dynamic,NULL,CRecordset::none);
myrec.Edit();
HGLOBAL t1=myrec.m_report.m_hData;
myrec.m_report.m_dwDataLength=i;
myrec.m_report.m_hData=gm;
myrec.SetFieldDirty(NULL);
myrec.Update();
myrec.m_report.m_hData=t1;
GlobalFree(gm);
myrec.Close();
myrec.m_strFilter="";