我用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)));
}
代码如下:
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)));
}
解决方案 »
- 非模态对话框的问题
- 菜鸟问题 用完成端口 如果 发送的数据包大于了 overlapped的数据缓冲 会怎么样啊 ~~~
- 如何使用小波包对图像进行去噪处理
- 100分求助:如何动态获得ActiveX控件的事件、方法、属性?
- 列表控件 ListCtrl 怎么实现当鼠标滑动到一个列表项的一个子项时,鼠标下方显示一个气球式的提示框?
- 有关CEDIT控件,请教各位大侠!!!!!!!!
- 如何对一个建立在连接两个表基础上的CDaoRecordset进行AddNew()
- 用什么软件可以看QQ后面的文件啊
- 一个资源严重不足的问题!各位大虾请进来看看吧?
- 有谁能给我一个文件压缩和解压的程序
- <CR><LF>.<CR><LF>
- CListCtrl的问题。
2.Uptate()
3.Close()
如果Addnew之后没有Update就Close会catch报错的。