我使用ADO的AppendChunk是出现错误。但是在ACESS200中却可以添加记录成功。
if(!m_bModify) return;
UpdateData();
if(m_pBMPBuffer == NULL || m_hPhotoBitmap == NULL || m_UserName == "" || m_Old == "")
{
AfxMessageBox("您没有提供完整的用户信息。\r\n这些信息包括:用户名、年龄、照片");
return;
}
m_buttonSaveInfo.EnableWindow(FALSE);
char *pBuf = m_pBMPBuffer;
VARIANT varBLOB;
SAFEARRAY *psa;
    SAFEARRAYBOUND rgsabound[1];
if(m_bNewUser)

m_pRecordset->AddNew();
m_pRecordset->PutCollect("username",_variant_t(m_UserName));
m_pRecordset->PutCollect("old",atol(m_Old));
if(pBuf)
{    
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = m_nFileLen;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
for (long i = 0; i < (long)m_nFileLen; i++)
SafeArrayPutElement (psa, &i, pBuf++);
varBLOB.vt = VT_ARRAY | VT_UI1;
varBLOB.parray = psa;
// m_pRecordset->GetFields()->GetItem("photo")->Attributes=TRUE;
m_pRecordset->GetFields()->GetItem("photo")->AppendChunk(varBLOB);
}
m_pRecordset->Update();
m_buttonDeleteUser.EnableWindow();
ResetControls();
m_bNewUser = FALSE;
m_bModify = FALSE;

解决方案 »

  1.   

    这个我也整不明白,
    花了我很多很多时间,还是整不明白,
    SQL SERVER里的image字段好不支持直接的,
    它只是存放了一个16位的指针,
    而实际的数据是另外单独存放的,
    并且取出来的时候,也是做了封装的,
    到现在我还不知道封装后,实际二进制数据到底偏移了什么字节?
    后来,只是在数据库里存放了一个图片文件的文件名和路径!
      

  2.   

    现在可以保存BMP格式的图片,而且可以读出来显示
    但是JPG格式不可以保存,不知是什么原因
      

  3.   

    有一个问题你要注意,在SQLSERVER当中,image类型的数据的存取有8000个字节的限制,也就是说,也就是说,你存取图片的时候,第一次最多只能取0-8000个字节,然后记录偏移量,再取8000-16000之间的字节,最后拼装成你的图片,相对于存储也一样。
    不知是否对你有所帮助。