用odbc写access数据库的最基本问题,我用以下方法操作多个CRecordSet的派生类向access数据库的多个表里写数据,总出现被admin用户锁定无法更新的错误。
是以下写法有错误,还是怀疑其他的没有列出的部分含有错误?
 
CRecordSet的派生类  m_RouteDB, m_RouteDB2, m_RouteDB3, m_RouteDB4; //(每个派生类都对应一个表)我对这里面每个派生类都进行以下相同的操作: 
int m_nstep, callsign, comu_time, end_time;
//////////////////////////////////////////////////////////////
CRecordSet的派生类  m_RouteDB;  
............................  
1.写数据库:  
writeDataBase()
{
           try  
           {  
                       m_RouteDB.Open(CRecordset::dynaset,  "SELECT  *  FROM  tlk_RouteBrdcst");  
                       m_RouteDB.AddNew();  
                       m_RouteDB.m_t                  =  m_nstep;  
                       m_RouteDB.m_callsign           =  callsign;  
                       m_RouteDB.m_comutime           =  comu_time;  
                       m_RouteDB.m_endtime            =  end_time;  
                       m_RouteDB.Update();  
                       m_RouteDB.Close();  
                   }  
           catch(CDBException*  e)  
           {  
                       AfxMessageBox(e->m_strError);  
                       return;  
           }  }

解决方案 »

  1.   

    看不出这段代码写的有什么错误,比我写的好,学习
    btw,你试试写一个表会出错吗?
    如果这也出错,那可能是access的什么设置不对了
    如果不出错,可能是多个CRecordSet同时操作同一个表了
      

  2.   

    我的写法在操作少量数据(1到2000条以下)或者5个以下的表的时候并不出错误,可是以操作5个以上的表舅会出现被admin锁定的错误。
    应该时出现了楼上laiyiling(◆陌生人·V2.0◆)大侠所说的错误了,
    可是为什么呢?我每次操作完后都用m_RouteDB.Close(); 关闭了该recordset了阿?
      

  3.   

    你是不是自己在程序以外已经手动的打开了ACCESS数据库文件在那儿啊??
      

  4.   

    我没有在程序外打开ACCESS,
    每次运行总出现同样的错误。
      

  5.   

    我觉得这样写效率效率不高,每次写都要打开和关闭数据库,在UpDate()前加一句UpdateData(),以下是我的重载OnMove函数内的代码,
             if(m_bAddMode)
    {
    if(!UpdateData())
    return false;
    TRY
    {
    m_pSet->Update();
    }
    CATCH(CDBException,e)
    {
    AfxMessageBox(e->m_strError);
    return false;
    }
    END_CATCH

    m_pSet->Requery();
    UpdateData(false);
    m_bAddMode=false;
    return true;
    }
    else
    {
    return CRecordView::OnMove(nIDMoveCommand);
    }
      

  6.   

    楼上的代码没有打开和关闭recordset的码, 我的看法是您操作一个recordset应该没问题,可是你同时操作多个recordset的派生类的时候可能会出现和我一样的问题,recordset被锁定,我没试过,若有不同见解望指正。