晕~~~~~
又是ASSERT错误,单步跟一下嘛。
反正dbcore。cpp的3282行看得见的。

解决方案 »

  1.   

    conn.OpenEx(_T("DSN=LocalServer;UID=sa;PWD=123;DRIVER={SQL Server}"), CDatabase::noOdbcDialog);
    你怎样确定OpenEx已经连接成功了??
    if (!m_db->OpenEx(...)) 不成功
      

  2.   

    如果连接不成功,
    rs.Open(CRecordset::dynaset, _T(" Select * from test "));当然要Debug Assertion Failed!
      

  3.   

    我已经中间测试了一下,
    try{
    conn.ExecuteSQL(" Insert test(name,flag) values('aaa',2) ");
    }catch(CDBException* e){
    printf("fail to connectting test!" + '\n' + e->m_strError);
    }
    发现可以insert。所以OpenEx()执行成功了。单步跟踪也是到rs.open时出错。
      

  4.   

    不对!ExecuteSQL在不打开数据表单时一样可以执行的。
    我就试过,在只读方式下照样可以插入。
      

  5.   

    File:dbcore.cpp
    Line:3282
    // Assume m_strSQL specifies table name
    ASSERT(m_nFields != 0);
    有可能是没找到test这张表
      

  6.   

    谢谢大家帮忙。
    to Ashura(阿修罗) : 即使是只读也表示打开了数据库连接。
    to swxh(中重) : CRecordset rs;  就这样定义。字段也匹配。
    to NEOS(飞机头) :有这个表。还会是什么问题呢?真奇怪
      

  7.   

    肯定是表单打开失败了,你用的是动态记录集吧?
    还是预先生成了对应于表单的类?
    再有,不打开记录集的话,ExecuteSQL一样可以执行,
    要不试试?