_RecordsetPtr rst;//定义记录集// _RecordsetPtr rst;//定义记录集
rst.CreateInstance(__uuidof(Recordset));//数据库查询初始化
rst->CursorLocation = adUseClient;
CString str;
str = "select * from daiqq where ID = '1';";
try{
rst->Open((LPCTSTR)str  ,_variant_t((IDispatch*)g_MyDb,true),adOpenDynamic,adLockPessimistic,adCmdText); 
}
catch(_com_error e)
{
AfxMessageBox("chucuo le ");
}
if ( !rst->adoEOF)
rst->MoveLast();
rst->AddNew();
CString ID = "2";
CString NAME = "DAIQQ";
rst->PutCollect("ID",_variant_t(ID));
rst->PutCollect("NAME",_variant_t(NAME));
CString strBlob;
strBlob = "gogogo";
char* pBuffer = strBlob.GetBuffer(strBlob.GetLength());
VARIANT varBLOB;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
if(pBuffer)
{    
   rgsabound[0].lLbound = 0;
   rgsabound[0].cElements = 7;
   psa = SafeArrayCreate(VT_UI1, 1, rgsabound);                      ///创建SAFEARRAY对象
   for (long i = 0; i < (long)7; i++)
  SafeArrayPutElement (psa, &i, pBuffer++);                         ///将pBuf指向的二进制数据保存到SAFEARRAY对象psa中
   varBLOB.vt = VT_ARRAY | VT_UI1;                                   ///将varBLOB的类型设置为BYTE类型的数组
   varBLOB.parray = psa;                                             ///为varBLOB变量赋值
   rst->GetFields()->GetItem("F_MESSAGE")->AppendChunk(varBLOB);///加入BLOB类型的数据

rst->Update();
rst->Close();
后来我把写入二进制的代码去掉,新建了一个只有"ID""NAME"的表,但是总是到了"rst->Update();"这个地方出错,怎么回事?请大家伙指教.

解决方案 »

  1.   

    你可能是以只读的方式打开的表
    试着这么写
    rst->Open((LPCTSTR)str  ,_variant_t((IDispatch*)g_MyDb,true),adOpenDynamic,adLockOptimistic,adCmdUnknown);
      

  2.   

    查一下你的表结构定义,存二进制的字段是不是缺省为NULL,如果没定义的话,程序就会出现你的错误
      

  3.   

    我重新试了一下,
    rst->Open((LPCTSTR)str  ,_variant_t((IDispatch*)g_MyDb,true),adOpenDynamic,adLockOptimistic,adCmdUnknown);
    但是还是不行.
    我把存二进制的字段取消了,只是保留"ID""NAME",这两个,
    str = "select * from daiqq ;";
    try{
    rst->Open((LPCTSTR)str  ,_variant_t((IDispatch*)g_MyDb,true),adOpenDynamic,adLockOptimistic,adCmdUnknown); 
    }
    catch(_com_error e)
    {
    AfxMessageBox("chucuo le ");
    }
    if ( !rst->adoEOF)
    rst->MoveLast();
    rst->AddNew();
    CString ID = "2";
    CString NAME = "DAIQQ";
    rst->PutCollect("ID",_variant_t((long)2));
    rst->PutCollect("NAME",_variant_t(NAME));
    rst->Update();
    结果还是到了"update()"这个地方就停滞了,程序好像死掉了.
      

  4.   

    你的F_MESSAGE字段是blob类型的吗?比我强多了,我连打开都不行呢:(