我用ODBC插入图片,用CRecordSet执行操作,Update成功返回1,但是在调用图片显示的时候出错。用其它方法插入的图片显示就是成功的。下面方上源码,那位大虾在线指点一下阿。
Record1 rs;
rs.Open();
if(!rs.IsEOF()) rs.MoveLast();
//rs.MoveLast();
rs.AddNew();
rs.m_ResCode = fileName;
rs.m_ResPicTitle = subFile.GetFileName();
CFileStatus fileStatus;
CFile pFile;
try{
    if(!pFile.Open(strTemp,CFile::modeRead)) return ;
pFile.GetStatus(fileStatus);
rs.m_ResPicData.m_dwDataLength = fileStatus.m_size;
       HGLOBAL hGlobal=GlobalAlloc(GPTR,fileStatus.m_size); 
rs.m_ResPicData.m_hData = GlobalLock(hGlobal); pFile.ReadHuge(rs.m_ResPicData.m_hData,fileStatus.m_size); 
if(rs.Update() != 0)
nCount++;
else nFailed++;
GlobalUnlock(hGlobal);  
pFile.Close();
rs.Close();

解决方案 »

  1.   

    pImageSet->AddNew();

    //打开文件并得到文件信息
        fileImage.Open(m_strFileName, CFile::modeRead);
        fileImage.GetStatus(fileStatus); //写入文件大小
    pImageSet->m_Image.m_dwDataLength = fileStatus.m_size; //分配内存堆
        HGLOBAL hGlobal = GlobalAlloc(GPTR, fileStatus.m_size);
        pImageSet->m_Image.m_hData = GlobalLock(hGlobal); //将数据传输到数据库
        fileImage.ReadHuge(pImageSet->m_Image.m_hData, fileStatus.m_size); //标记该数据被改变
        pImageSet->SetFieldDirty(&pImageSet->m_Image); //标记此数据为非空
        pImageSet->SetFieldNull(&pImageSet->m_Image, FALSE); pImageSet->Update();
       
    //释放内存堆
        GlobalUnlock(hGlobal); pImageSet->Close();
    delete pImageSet;