我现在想向数据库中读写图片,我该怎么样做?

解决方案 »

  1.   

    ole 对象!
    我用的是access!来信
    [email protected]
    我发一个原码给你!
      

  2.   

    代码的内容是将c盘下的abc.doc文件存入表hycao中,注意相应字段的数据类型应为OLE 对象;最后再从数据库中将该文件读出,保存为c:\TempFile.doc:Dim adoConnection As New ADODB.Connection
    Dim adoRecordset As New ADODB.Recordset
    adoConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=C:\abc.mdb"
    adoRecordset.Open "SELECT * FROM hycao", adoConnection, adOpenKeyset, adLockOptimistic
    adoRecordset.AddNew
    Dim adoStream As New ADODB.Stream
    adoStream.Type = adTypeBinary
    adoStream.Open
    adoStream.LoadFromFile "c:\abc.doc"
    '将二进制文件写入大字段:
    adoRecordset.Fields.Item(5).AppendChunk adoStream.Read
    adoRecordset.Update
    '================================
    '从大字段读取二进制数据:
    Dim TempFileName As String
    TempFileName = "c:\TempFile.doc"
    adoStream.Write adoRecordset.Fields.Item(5).GetChunk(adoRecordset.Fields.Item(5).ActualSize)
    adoStream.SaveToFile TempFileName, IIf(Len(Trim(Dir(TempFileName, vbNormal + vbHidden))) > 0, adSaveCreateOverWrite, adSaveCreateNotExist)
      

  3.   

    www.vckbase.com上面有一个例程ADOBLOB,建议看看
    其中核心代码如下:
    ///读取数据
    ....
    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))
    {///判断数据类型是否正确(BYTE类型的数组)
    if(m_pBMPBuffer = new char[lDataSize+1]) ///重新分配必要的存储空间
    {
    char *pBuf = NULL;
    SafeArrayAccessData(varBLOB.parray,(void **)&pBuf); ///得到指向数据的指针
    memcpy(m_pBMPBuffer,pBuf,lDataSize); ///复制数据到缓冲区m_pBMPBuffer
    SafeArrayUnaccessData (varBLOB.parray);
    m_nFileLen = lDataSize;
    m_hPhotoBitmap = BufferToHBITMAP(); ///生成BITMAP对象
    }
    }
    }
    .....
    /// 保存数据
    ......
    char *pBuf = m_pBMPBuffer;
    VARIANT varBLOB;
    SAFEARRAY *psa;
        SAFEARRAYBOUND rgsabound[1];
    if(pBuf)
    {    
    rgsabound[0].lLbound = 0;
    rgsabound[0].cElements = m_nFileLen;
    psa = SafeArrayCreate(VT_UI1, 1, rgsabound); ///创建SAFEARRAY对象
    for (long i = 0; i < (long)m_nFileLen; i++)
    SafeArrayPutElement (psa, &i, pBuf++); ///将pBuf指向的二进制数据保存到SAFEARRAY对象psa中
    varBLOB.vt = VT_ARRAY | VT_UI1; ///将varBLOB的类型设置为BYTE类型的数组
    varBLOB.parray = psa; ///为varBLOB变量赋值
    m_pRecordset->GetFields()->GetItem("photo")->AppendChunk(varBLOB);
    ///加入BLOB类型的数据
    }
    m_pRecordset->Update();
    ......