我已经生成了一个MDI的程序,是这样的,用向导生成的两个视图的样式,在用向导生成框架时没有连接数据库,但是现在想这样,在左边的TREE中当点击某一项时右面的视图中会显示从ACCESS数据库中读出的内容并且支持删除,修改等操作,我用ODBC+ACCESS,用CRecordSet类实现,经过测试纪录集已经打开,但是只要movefirst或者其他什么操作就出现“试图越过数据的存储空间”,各位大侠帮帮忙吧,谢谢!
比如:
(数据源为ycjs,数据库名字为ycjs.mdb,表log
if(m_db.IsOpen()) m_db.Close();
CString  sDSN="ODBC;DRIVER=Microsoft Access Driver (*.mdb);DSN=ycjs;DBQ=ycjs.mdb";

m_db.Open("ycjs",FALSE,FALSE,sDSN);

CString strSQL="select * from log";
if(m_pSet.IsOpen()) m_pSet.Close();
//m_pSet.m_pDatabase=&m_db;
BOOL isopen =m_pSet.Open();//CRecordset::none,strSQL);
         //BOOL isopen =m_pSet.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL,none);也不行

解决方案 »

  1.   

    原来的数据库表中是空的,我往表里手工加上一条数据然后再用程序添加纪录时那个错误没了又变成“更新或者删除的企图失败。”我在添加纪录函数里是这样写的:
    try
    {
    m_pSet.AddNew();
    }
    catch(CDBException *e1)
    {
    AfxMessageBox("添加记录失败!\n"+e1->m_strError,MB_ICONEXCLAMATION);
    m_pSet.MoveFirst();
    e1->Delete();
    return;
    }

     
     m_pSet.m_column1=GetRecordCount(m_pSet);
             m_pSet.m_column2=m_cslogLevel;
     //AfxMessageBox("kopko");
         m_pSet.m_column3=m_cstype;
     m_pSet.m_column4=m_csEventResult;

     m_pSet.m_column5=m_logTime;
     m_pSet.m_column6=m_csFrom;
     m_pSet.m_column7=m_csdetail;
     
       try
    {
    m_pSet.Update();
    } catch(CDBException *e1)
    {
    AfxMessageBox("添加记录更新时失败!\n"+e1->m_strError,MB_ICONEXCLAMATION);
    m_pSet.MoveFirst();
    e1->Delete();
    //UpdateData(FALSE);更新列表信息
    return;
    }
         m_pSet.Requery();
         m_pSet.MoveLast();         m_pSet.MoveFirst();
      

  2.   

    当AddNew时,不能再移动指针,添加(Update)完成再移动指针,其他修改也是这样,你在AddNew时调用了自己定义的GetRecoedSet()函数,可能这个函数里指针移动了