1. 连接数据源,能够Edit,能够AddNew,但是不能Delete,为什么?
    相关代码:
m_pset = new CExset(&m_dbVA);
m_dbVA.Open(NULL, FALSE ,FALSE ,_T("ODBC;DSN=Exll") ,TRUE);
CString strSQL = "select * from VR";
m_pset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL); m_pset->Edit();
m_pset->m_Flag=FALSE;   //此句正确执行
m_pset->AddNew();       //此句也正确执行
m_pset->Delete();       //此处出错!!对话框显示“更新或删除的企图失败了”
m_pset->Update();
m_pset->MoveNext();2. 查询数据库,如果查找到,再次调用数据库正确;如果没有找到,再次调用就出错
    相关代码:
int CMyClass::Allot(CString sRequest)
{
if m_pset->IsOpen()) {
m_pset->Close();
     }
     m_pset->Open();

CRecordsetStatus rStatus;
m_pset->MoveFirst();           // 就是这儿
m_pset->m_strFilter.Format("[RequestID]='%s' \
AND [Flag]=FALSE ",sRequest);

if(!m_pset->Requery()){
m_pset->m_strFilter="";
m_pset->Requery();
} //判断是否存在纪录
m_pset->GetStatus(rStatus);

if(rStatus.m_lCurrentRecord<0){
AfxMessageBox("不存在!");
}
else{
m_pset->Edit();
m_pset->m_Flag=TRUE;
m_pset->Update();
} return 0;
       } void CFirstClass::MyFunc()
{
     CString strRRR1="abcd";
     CString strRRR2="efgh";
             m_pMyClass->Allot(strRRR1);    //第一次查询
     m_pMyClass->Allot(strRRR2);    //第二次查询
}
   如果第一次查询查找到,第二此查询正确执行;如果第一次没查到,第二此执行到m_pset->MoveFirst();处出错,对话框显示“试图越过数据的有效存贮区间”3. 定义的access数据库,有自动编号一项字段,假如写入10行记录,将此10行删除,再次写入时自动编号变成11。因为我一直在数据库中操作,现在已经到2000多了,怎么让它清零并每次从1开始?

解决方案 »

  1.   

    1 各种操作不能混合用
    m_pset->Edit();
    m_pset->m_Flag=FALSE;
    m_pset->Update(); m_pset->AddNew();
    m_pset->m_Flag=FALSE;
    m_pset->Update(); m_pset->Delete();
    2 m_pset->MoveFirst();之前现判断一下是否有记录。if (m_pset->GetRecordCount() > 0)3 好像不行。除非全部删除后,压缩数据库
      

  2.   

    1。AddNew后,应该先Update。
    2。没有记录的话,就不能MoveFirst了。应该先判断有没有记录。
    3。没有办法。不知道在数据库中能否手工修改。
      

  3.   

    谢谢。
    1. 改成   m_pset->Edit();
    m_pset->Delete();       
    m_pset->Update(); 后也同样出错,但是把delete改成AddNew或m_pset->m_Flag=FALSE;就对
    2. m_pset->GetRecordCount() 确实为0,好奇怪,数据库里明明有很多记录呀
    3. 不行就算了。
      

  4.   

    你不是说查询失败了就错误嘛。失败了,m_pset也许就出问题了。比如空了。
      

  5.   

    查询没有失败得,查不着时执行
                      if(rStatus.m_lCurrentRecord<0){
    AfxMessageBox("不存在!");
    }
      

  6.   

    1. 改成   m_pset->Edit();
    m_pset->Delete();       
    m_pset->Update(); 
    ------------------------
    不能这样用的,每当调用Edit的时候,必须用Update才能使Edit生效。AddNew也使这样。
    你在中间插入个Delete是什么意思呢?
      

  7.   

    AddNew();
    是添加一个空记录!
      

  8.   

    哎呀,其实我并不想Edit也不想AddNew,只是想删除数据库中的记录。结果出错,但是我发现Edit和AddNew的时候却没有错!!!我怎样做才能删除掉数据库中的记录呢???
             m_pset->Edit();
    m_pset->Delete();       
    m_pset->Update();  不行,把Edit一句去掉也不行!!
      

  9.   

    第一个问题我知道了,把Edit去掉,把Update去掉就行了。顺便问一下,有没有办法可以删除整个表中所有记录???
      

  10.   

    顺便问一下,有没有办法可以删除整个表中所有记录???
    ----------------------------
    执行SQL语句CDatabase *pDatabase;
    //打开数据库后执行
    pDatabase->ExecuteSQL("delete from TableName");
      

  11.   

    谢谢 jnxulei(石头) ! :)