谢谢

解决方案 »

  1.   

    数据库中照片的数据类型选择"OLE 对象"
    然后在你抓完图后添加如下代码m_pRecordset->GetFields()->GetItem("照片")->ActualSize;
      

  2.   

    m_pRecordset->GetFields()->GetItem("照片")->ActualSize;
    这段代码是读取照片
    void CAddRelationInfo::SetFileToDb(_RecordsetPtr &recPtr, CString strPath)
    {
    VARIANT varChunk;
    SAFEARRAY *psa;
    SAFEARRAYBOUND rgsabound[1]; 
    //VT_ARRAY | VT_UI1
    CFile f(strPath.operator LPCTSTR(),CFile::modeRead);
    BYTE  bVal[ChunkSize+1];
    long uIsRead=0;
    //Create a safe array to store the array of BYTES  
    while(1)
    {
    //读取照片
    uIsRead=f.Read(bVal,ChunkSize);
    if(uIsRead==0)break;
    rgsabound[0].cElements =uIsRead;
    rgsabound[0].lLbound = 0;
    ///创建SAFEARRAY对象 
    psa = SafeArrayCreate(VT_UI1,1,rgsabound);

    for(long index=0;index<uIsRead;index++)          
    {
    if(FAILED(SafeArrayPutElement(psa,&index,&bVal[index])))
    ::MessageBox(NULL,"错误。","提示",MB_OK | MB_ICONWARNING);
    }
    //为varChunk变量赋值
    varChunk.vt = VT_ARRAY|VT_UI1;
    varChunk.parray = psa;
    //加入BLOB类型的数据
    try{
    recPtr->Fields->GetItem("照片")->AppendChunk(varChunk);
    }
    catch (_com_error &e)
    {
    CString str=(char*)e.Description();
    ::MessageBox(NULL,str+"\n错误。","提示",MB_OK | MB_ICONWARNING);
    }
    ::VariantClear(&varChunk);
    ::SafeArrayDestroyData( psa);
    if(uIsRead<ChunkSize)break;
    }
    f.Close();
    }
    调用:SetFileToDb(m_pRecordset,m_strPhotoPath);
    m_strPhotoPath是图片的路径
      

  3.   

    可以使用ADO将图片存入数据库中,参考:
    http://www.vckbase.com/document/viewdoc/?id=719
    http://www.vckbase.com/document/viewdoc/?id=252
      

  4.   

    BLOB数据的读取
    对应于保存数据时我们所使用的AppendChunk函数,读取数据应该使用GetChunk函数,GetChunk的原型如下:
    _variant_t GetChunk (long Length );
    给出数据的长度后GetChunk将返回包含数据的VARIANT类型变量,然后我们可以利用SafeArrayAccessData函数得到VARIANT变量中指向数据的char *类型的指针,以方便我们的处理,具体代码如下:long lDataSize = m_pRecordset->GetFields()->GetItem("photo")->ActualSize;///得到数据的长度
    if(lDataSize > 0)
    {
       _variant_t varBLOB;
       varBLOB = m_pRecordset->GetFields()->GetItem("photo")->GetChunk(lDataSize);
       if(varBLOB.vt == (VT_ARRAY | VT_UI1))                                 ///判断数据类型是否正确
       {
            char *pBuf = NULL;
            SafeArrayAccessData(varBLOB.parray,(void **)&pBuf);              ///得到指向数据的指针
            /*****在这里我们可以对pBuf中的数据进行处理*****/
            SafeArrayUnaccessData (varBLOB.parray);
       }
    }
      

  5.   

    抓图后 使用
    HBITMAP directBmp = CreateDIBSection(hMemDC, (BITMAPINFO*)&RGB24BitsBITMAPINFO, 
    DIB_RGB_COLORS, (void **)&lpBitmapBits, NULL, 0);
    将图像二进制序列保存到lpBitmapBits byte数组中。
     然后加上 位图 BITMAPFILEHEADER  BITMAPINFOHEADER 信息 一起保存到数据库中。