我在用AdO添加或者删除数据库的时候报Runtime error错误,数据库用的是个封装的类
这个类在:http://www.codeproject.com/KB/database/caaadoclass1.aspx#CADODatabase
//该段出错
BOOL iRet;
CString abc;
while(!m_pRsTemp.IsEOF())
{
MessageBox("31");
iRet=m_pRsTemp.GetFieldValue("from",from);
if(!iRet)
AfxMessageBox(m_pRsTemp.GetLastErrorString()); MessageBox("32");
iRet=m_pRsTemp.GetFieldValue("to",to);
if(!iRet)
  AfxMessageBox(m_pRsTemp.GetLastErrorString()); MessageBox("33");
if (from==selectuser || to==selectuser)
{
MessageBox("34");
   // iRet=m_pRsTemp.Delete();//报错

m_pRsTemp.AddNew();//报错
m_pRsTemp.SetFieldValue(0,from);
m_pRsTemp.SetFieldValue(1,to);
m_pRsTemp.SetFieldValue(2,selectuser);
m_pRsTemp.SetFieldValue(3,CTime::GetCurrentTime().Format("%Y-%m-%d %H:%M:%S"));
m_pRsTemp.Update(); } 
  if(!iRet)
  AfxMessageBox(m_pRsTemp.GetLastErrorString());
MessageBox("35");
  m_pRsTemp.MoveNext();
MessageBox("36");我是一个数据库,打开了两次,因为一个类用来存放数据,一个类用来查找数据并做相关的删除操作,不过我屏蔽一个存放数据的类,只用删除的类来打开一次的时候,还是报错runtime error

解决方案 »

  1.   

    你为啥不直接用SQL语句Insert into
      

  2.   

    捕获异常看看具体错误是啥:
    try
    {
    //有问题的代码块
    }
    catch (_com_error& e)
    {
    AfxMessageBox(e.Description());
    }
      

  3.   

    如果AddNew出错,应该是m_pRsTemp的游标类型不对。
      

  4.   

    m_pRsTemp.AddNew();//报错
    -----------
    你的表是空表吗?
    如果不是,最好先MoveLast再AddNew
      

  5.   

    另外还要确定你对数据集有写的权限~
    得看看你的Open函数怎么调用的~
      

  6.   


    Addnew没报错,刚才弄错了,只是delete的时候报错
      

  7.   

    打开和链接数据库的代码
    CString strConnection = _T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=msg.mdb");
    if(m_pDbTemp.Open(strConnection))
    {
    m_pRsTemp = CADORecordset(&m_pDbTemp);
    if(!m_pRsTemp.Open("msgdb", CADORecordset::openTable))
    AfxMessageBox(m_pRsTemp.GetLastErrorString());
    }
    else
    {
    AfxMessageBox(m_pDbTemp.GetLastErrorString());
    DWORD dwError = m_pDbTemp.GetLastError();
    return ;
    }addnew没报错,只有delete的时候出错
      

  8.   

    利用try catch捕获错误如下:
    CADORecordset Error
    Code = 80004005
    Code meaning = 未指定的错误
    Source = Microsoft Cursor Engine
    Description = 键列信息不足或不正确。更新影响到多行忘记说了,我删除数据库虽然报哪个runtime error,但是他却把所有符合要求的都删掉了,也就是哪个description描述的影响到多行
    各位大侠看看什么情况
      

  9.   

    m_pRsTemp后面还要用啊,delete报错很正常~Description = 键列信息不足或不正确。更新影响到多行
    ----------
    是不是插入也失败了?
    根据错误描述,可以检查一下有没有插入重复的键值或者键列为空?
    得看一下你的表结构定义了~
      

  10.   

    请问是不是在access表中设立主键就行了!