请问各位,我在sql里建了一张表,并且有个字段为image,请问怎么在vc里用ado进行图片的存取;另我在网上看到不少人说只需要在数据库中存放图片的文件名,不存放物理路径,用的时候再去找相对路径,请问各位这两种方式怎么实现呀?小弟在线的等~!

解决方案 »

  1.   

    _ StreamPtr  pStm;
             pStm.CreateInstance("ADODB.Stream");
             variant_t varOptional(DISP_E_PARAMNOTFOUND,VT_ERROR);
             pStm->PutType(adTypeBinary);//类型为二进制
             //得到字段内容的大小
           //  long lDataSize = m_pRecordset->GetFields()->GetItem("photo")->ActualSize;
            //m_pRecordset为一个打开的纪录集对象,含有photo这个blob字段
            pStm->Open( varOptional,  
                         adModeUnknown, adOpenStreamUnspecified, _bstr_t(), _bstr_t());         
             //打开pStm
              pStm->Write(_variant_t(m_pRecordset->GetFields()->GetItem("photo")->Value));
              //把photo字段的内容写入pStm
              pStm->SaveToFile("c:\\publogo.jpg", adSaveCreateOverWrite);
              pStm->Close();
    这是读取图片。
     _StreamPtr  pStm;
             pStm.CreateInstance("ADODB.Stream");
             variant_t varOptional(DISP_E_PARAMNOTFOUND,VT_ERROR);
          //   long lDataSize = m_pRecordset->GetFields()->GetItem("photo")->ActualSize;
             pStm->PutType(adTypeBinary;        pStm->Open( varOptional,  
                         adModeUnknown, adOpenStreamUnspecified, _bstr_t(), _bstr_t());
             pStm->LoadFromFile("c:\\book.gif");//读入文件
             variant_t  varBLOB=pStm->Read(adReadAll);
           m_pRecordset->GetFields()->GetItem("photo")->Value= varBLOB;
    这是写入图片。
      

  2.   

    在数据库中存放图片的文件名,不存放物理路径,用的时候再去找相对路径,这有什么不好办的?比如你在字段中放入“../1.bmp”,在vc中使用的时候,只要LoadBitmap这个路径就能显示了。路径字段作为字符串类型就可以了