现有代码如下:
    void fun()
    {   Recordset reTree(&m_database);
strSQL="SELECT * FROM TreeItem where ParentItem like '%中国%" ;
if(reTree.IsOpen())
    reTree.Close();
          reTree.Open(CRecordset::forwardOnly,strSQL,CRecordset::readOnly);
 if (!(reTree.IsEOF()))
{
    TreeSumRecordCount(strValue)
}
      }
    void TreeSumRecordCount(CString strValue)
{
CRecordset reTree(&m_database);    //用于创建一个查询记录集
strSQL="SELECT * FROM TreeItem where ParentItem like '%北京%" ;
if(reTree.IsOpen())
   reTree.Close();
reTree.Open(CRecordset::forwardOnly,strSQL);
}
我是想两个函数都使用一个m_database,程序运行到函数TreeSumRecordCount中的时候,在rsTree.Open 时,出现异常:连接占线导致另一个 hstmt
请问如何解决这个问题?谢谢

解决方案 »

  1.   

    ODBC的方法做多个表之间的查询及其需要得到来回滚动的记录集是不是都很不容易阿?
      

  2.   

    CRecordset::forwardOnly 改为 CRecordset::snapshot就应该可以了
      

  3.   

    楼上的方法,我用了,不对,一样的问题。
    我这里用的Recordset是没有帮定的?有没有一个解决方法呢?
      

  4.   

    strSQL="SELECT * FROM TreeItem where ParentItem like '%中国%'";
    仔细看了一下,感觉你的SQL语句好象不对
      

  5.   

    SQL语句没有问题,我是查过了,
      

  6.   

    hongzm(西门吹牛) 
        U{{{PPPP
    ?????是不是在ODBC中不能多个记录连接到一个数据源上?
      

  7.   

    是不是在ODBC中不能多个记录连接到一个打开的Database上吗?
      

  8.   

    应该是你的两个CRecordset对象的名字都一样的问题吧,换个不同的名字试
      

  9.   

    strSQL="SELECT * FROM TreeItem where ParentItem like '%中国%" ;
    有个%好象不是标准字符,而且还差个'
      

  10.   

    不是好像有多表连接么,应该可以的,不过没试过。
    %好像说的ACCESS数据库中的通配符。应该没错的,
      

  11.   


     laiyiling(陌生人_专注于MS技术):
          "  应该是你的两个CRecordset对象的名字都一样的问题吧,换个不同的名字试"
    不是名字相同,他们不是一个函数,不影响,如果具有递规调用,也无法换名字,而且换名字我是试过的,也不行。
          请大家看看还有办法,谢谢!
      

  12.   

    晕撒,一个这样的问题,都没人愿意说清爽。。 这可是最常见的问题啊。 
    我是个初学者,恰好刚刚解决这个问题, 虽然我还有大堆的问题等待别人回答  
    :(
    问题的关键是定义CRecordset对象要用指针:
    先定义好两个类 seta,setb,都从CRecordset中派生(用向导做出来)
             seta *one;
             setb *two;
    CDatabase m_db;         one = new seta(&m_db);
    two = new setb(&m_db);
    CString strConnect;
    strConnect = one->GetDefaultConnect();
    m_db.Open(NULL,FALSE,FALSE,strConnect,FALSE);
    one->Open();
    two->Open();
    剩下的就是你自己的代码怎么修改了还有啊, 别忙着走, 我还有个问题:
    普通的一个记录集
    class seta:public CRecordset;
    {...}
    seta a;
    a.open(...)
    a.m_myv1 = newvalue1;
    a.m_myv2 = newvalue2;
    ...
    a.edit();
    a.update();但打开库,结果没有变
      

  13.   

    楼主可在fun()中的if中close 记录集试试,以前用ADO做过类似的,没问题啊,ODBC应该也可以吧。to :bug2k(bug2k) 
    a.edit()应该在 
    a.m_myv1 = newvalue1;
    a.m_myv2 = newvalue2;
    之前吧,你这样使用没出现异常?
      

  14.   

    to: yingpf(阿飛)
    没有异常, 异常的平静。 呵呵 
    变更一下edit() 次序就好了。