我用ado实现对access中表AppearKnow进行add和update,使用ado中的绑定数组,编译通过了,执行出现问题。UnKnown error ox 800AoBCD,结果是不能加入数据不能加入数据库表,这是什么原因?怎么解决呢?
   代码如下:
void CRsCgDlg::OnBtnCmadd() 
{
// TODO: Add your control notification handler code here
    if(!UpdateData())
return;
m_pRs=NULL;
CCustomRs rs;
try
{
HRESULT hr=NOERROR;
if(FAILED(hr=m_pRs.CreateInstance(__uuidof(Recordset))))
_com_issue_error(hr); m_pRs->Open("AppearKnow",(LPCTSTR)m_strConnection, adOpenStatic, 
adLockOptimistic, adCmdTable);//open database and table    strcpy(rs.m_sznumber,m_strDlgnumber);
strcpy(rs.m_szname,m_strDlgname);
strcpy(rs.m_szcontext,m_strDlgcontext);
strcpy(rs.m_szsubject,m_strDlgsubject); COleSafeArray vaFieldlist,vaValuelist;
rs.FillFieldsArray(vaFieldlist,vaValuelist);
if(FAILED(hr=m_pRs->AddNew(vaFieldlist,vaValuelist)))
_com_issue_error(hr);
m_pRs->Close(); }
catch(_com_error& e)
{
MessageBox(e.ErrorMessage());
return;
}
RefreshBoundData();
}
    绑定字段数组为:
void CCustomRs::FillFieldsArray(COleSafeArray&  vaFieldlist,COleSafeArray& vaValuelist)
{
//fill field array
vaFieldlist.CreateOneDim(VT_VARIANT,4);
long lArrayIndex[1];
lArrayIndex[0]=0;
vaFieldlist.PutElement(lArrayIndex,&(_variant_t("number")));
lArrayIndex[0]=1;
vaFieldlist.PutElement(lArrayIndex,&(_variant_t("name")));
    lArrayIndex[0]=2;
vaFieldlist.PutElement(lArrayIndex,&(_variant_t("context")));
lArrayIndex[0]=3;
vaFieldlist.PutElement(lArrayIndex,&(_variant_t("subject")));
  //fill field value array
vaValuelist.CreateOneDim(VT_VARIANT,4);
lArrayIndex[0]=0;
vaValuelist.PutElement(lArrayIndex,&(_variant_t(m_sznumber)));
lArrayIndex[0]=1;
vaValuelist.PutElement(lArrayIndex,&(_variant_t(m_szname)));
    lArrayIndex[0]=2;
vaFieldlist.PutElement(lArrayIndex,&(_variant_t(m_szcontext)));
lArrayIndex[0]=3;
vaValuelist.PutElement(lArrayIndex,&(_variant_t(m_szsubject)));
}

解决方案 »

  1.   

    _ConnectionPtr m_connection;  呢???
      

  2.   

    1.AddNew()
    2.Uptate()
    3.Close()
    如果Addnew之后没有Update就Close会catch报错的。
      

  3.   

    是你AddNew之后没有Update就Close了!
      

  4.   

    这问题有些奇怪,在用sql server 时没问题,因在access里的一个文本类型就使程序出现上述问题,有没有人知道呀,我现在不用这办法已解决了,我不知道这原因出在哪?就这个问题再过几天如没解决就结贴吧。
      

  5.   

    这个问题我已用PutCollect()的方法解决,欢迎大家参与我的其它问题的讨论,结帐给分