CRecordset派生类在调用open()的时候,发生死锁,就是open函数执行没有结束。
Open(AFX_DB_USE_DEFAULT_TYPE,  _T("select * from tablename"));
就是这么一个简单的语句。不过不是每次都死掉。一般情况下都会正常查询出结果。数据库中的表也和派生类构造的完全吻合。死掉的时候,我debug进去发现是到了dbcore.cpp文件BOOL CRecordset::AllocHstmt()函数的AFX_SQL_SYNC(::SQLAllocStmt(m_pDatabase->m_hdbc, &m_hstmt));语句死掉的。就是在该语句F10之后,再也没有反应了。
请问大家这是怎么回事?

解决方案 »

  1.   

    奇怪的问题。你用的什么数据库?如果是Access的话,有些词是它的关键字,不能作为表名或字段名,如name等
      

  2.   

    是不是有资源泄露导致SQLAllocStmt无法再分配资源?
      

  3.   

    数据库是sql server 2000 person edition,就是为了练习用。
    数据库里面表和CRecordset没问题。关联都对。
    因为不是每次都这样错,debug的时候才出现。直接运行的时候不会。
      

  4.   

    使用 Command 对象的 Execute 方法将执行在该对象的 CommandText 属性中指定的查询。如果 CommandText 属性指定以行返回的查询,执行产生的任何结果都将存储在新的 Recordset 对象中。如果此命令不是以行返回的查询,提供者将返回关闭的 Recordset 对象。如果不需要 Recordset,某些应用程序语言允许忽略此返回值。由此可见
    如果判断的话,不应该判断是否为空,而是判断记录集是否关闭
      

  5.   

    debug的时候才出现。直接运行的时候不会。
    ------------
    会不会是时间问题?
      

  6.   

    to:shakaqrj 
    有时候需要调试,所以才会遇到这个问题,唉,麻烦啊。