CDatabase *db=new CDatabase;
db->OpenEx(_T("DSN=table1") , CRecordset::dynaset   );
rs.m_pDatabase=db;
rs.Open(CRecordset::dynaset ,"select * from table1");
        然后调用
         rs.Delete();
        可以删除,但是出现运行时错误,怎么解决?

解决方案 »

  1.   

    用rs.MoveNext();
    可以
    用rs.AddNew();
    也不可以
    就是出现
    ASSERT(m_nFields != 0);
    怎么回事?
      

  2.   

    最近在开发中使用VC++ 6.0和ODBC方式对数据库进行操作时,为了提高灵活性,所以直接使用了CRecordset类建立对象。在使用中连接数据库,打开记录集都没有问题,而且CRecordset中的MoveFirst/MoveNext/MovePrev/MoveLast等原有函数也都可以正常使用,但是当我想使用CRecordset类的Delete()函数进行操作的时候就会报错Assert Failed.经过Tracer发现问题出在SetFieldNull()函数中的判断
    if(m_nFields <0)
        ASSERT(FALSE);
    经过跟踪发现,使用MFC Classwizard进行派生时会在构造函数中自动对m_nFields进行赋值,但是当我们自由使用CRecordset的时候就没有了这一部,当我显示的对m_nFields赋值时仍然会报错,是关于RFX的错误。没有使用关于CRecordset类的Update操作,但是看到其他朋友写的文章应该是select是不会有问题的。看来自己要把RFX那部分也补上了,后者由于时间关系没有完成。完成测试会更新该文档。怎么解决啊?
      

  3.   

    // we can't construct an INSERT statement w/o any columns
    ASSERT(m_nFields != 0);