BYTE* data = new BYTE[3];
    data[0] = 32;
    data[1] = 34;
    data[2] = 231;    SAFEARRAY *psa;
    SAFEARRAYBOUND rgsabound[1];    rgsabound[0].lLbound = 0;
    rgsabound[0].cElements = 3;
    psa = SafeArrayCreate(VT_UI1, 1, rgsabound);                      
    for (long i = 0; i < (long)3; i++)
    SafeArrayPutElement (psa, &i, data++);                     
    
    VARIANT    varBLOB;
    varBLOB.vt = VT_ARRAY | VT_UI1;                                   
    varBLOB.parray = psa;           
    ////////////////////
    m_pRecordset->AddNew();
    m_pRecordset->Fields->GetItem(_variant_t("id"))->Value=_bstr_t("1928");
    FieldPtr dataField  = m_pRecordset->Fields->GetItem("dataField");
    dataField->AppendChunk(varBLOB);///加入BLOB类型的数据    m_pRecordset->Update(); 
上面是我的测试代码,调试时在AppendChunk处发生了问题,调试进去后,发现问题发生在msado15.tli中AppendChunk函数的AppendChunk返回了负的HRESULT,诚请各位大虾虾米帮助!

解决方案 »

  1.   

    可是table定的就是varbinary类型啊,没有其它方法吗
      

  2.   

    varbinary类型最大长度8000字节,而且该类型字段的ado field类型不是adfldlong
      

  3.   

    调用这个函数m_pRecordset->Fields->GetItem("dataField")->AppendChunk(varChunk),总是弹出“在该环境中不允许”
    快崩溃了...
      

  4.   

    再请教两个问题:
    1.我要读写varbinary应该怎么做?
    2.在数据库里存取文件应该采用什么字段?
      

  5.   

    稍等,网络有点问题,我在整理例子代码第二个问题,用image比较好,varbinary最多能存放8000字节
      

  6.   

    好的,把源代码发到我邮箱吧,最好把你建表的SQL也发给我,多谢。
    [email protected]
      

  7.   

    _StreamPtr pStream = NULL;
    pStream.CreateInstance(__uuidof(Stream));
    variant_t varOptional(DISP_E_PARAMNOTFOUND,VT_ERROR);
    pStream->PutType(adTypeBinary);
    pStream->Open(varOptional, adModeUnknown, adOpenStreamUnspecified, _bstr_t(), _bstr_t());pStream->Write(varBLOB);
    pStream->Position=long(0);
    _variant_t vbin = pStream->Read(filesize);

    pRs->GetFields()->GetItem("dataField")->Value= vbin; //添加varbinary类型的数据   pRs->Update();       
    pStream->Close();
      

  8.   

    以上代码是把blob类型的数据写入varbinary类型的字段把这段替换你的代码部分就可以了对于Image类型的字段你原先的代码没有问题,但如果用用在varbinary那么就会出现错误异常
      

  9.   

    pRs->GetFields()->GetItem("dataField")->Value= varBLOB;
    这另外一种方法,应该是最直接的
      

  10.   

    这里filesize这里指的是varBLOB这个对象所保存的字节数组的字节大小因为是保存文件,我的代码里使用了文件大小,你可以改成你的字节数组大小
      

  11.   

    update的时候仍然出错,弹出对话框“不能更新查询,因为它不含键的搜索列”
      

  12.   

    我建了一个主键“id”,可以work了
    多谢兄台!
    如果是女的就嫁给你了,可惜啊,呵呵,50分全归你了。