何必这么麻烦?用DAO引擎不更好更快吗??!!

解决方案 »

  1.   

    你用快照(好象是snopshot??)方式打开试试
      

  2.   

    GetRecordCount函数不一定可靠,你用GetAbsolutePosition试试(先MoveLast).
      
      

  3.   

    利用GetRecordCount函数不能得到它的实际记录数。
    如果你只是想得到一下记录总数,可以使用SQL语句来得到,如果你还需要遍历记录,可以通过自己统计记录数目来得到。如果使用SQL语句,参考如下代码:
    CRecrodset rst;
    rst.Open(CRecordset::snapshot,"select count(*) from tablaname where ....",NULL);
    long l=rst.GetFieldValue(0);
    l为记录总数,大概的代码如上所示,如果你要详细的说明,可以参考开发文档当中我写的一篇关于对数据库编程的文章,里面有很详细的说明。
      

  4.   

    我在用ado中知道直接得到记录数与打开记录集的光标类型有关,这儿是不是也有相应的问题!
      

  5.   

    下面的代码能返回正确结果: CDatabase db;
    db.OpenEx("DSN=test;UID=;PWD=");

    CRecordset set(&db);
    set.Open(CRecordset::dynaset, "SELECT [1].字段1, [2].字段1 FROM 1 INNER JOIN 2 ON [1].字段1 = [2].字段1",CRecordset::readOnly);
    while(!set.IsEOF())
    {
    set.MoveNext();
    }
    int n = set.GetRecordCount(); set.Close();
    db.Close();表1:name: 1; field:字段1, text;       record: 1,2,3,4;
    表1:name: 2; field:字段1, text,primary key;record: 1,2,4;GetRecordCount返回3;
      

  6.   

    wjf:
         按照您的方法我试了一下出现不支持的连接的错误提示,您是否愿意看看我的源程序?                                                      SHELL                                                        [email protected]
      

  7.   

    正如happylaodu所说,GetRecordCount()常常是不可靠的,你最好自己定义个变量,一边遍历,一边计数。如下:
    int nRecCount=0;
    pRs->MoveFirst();
    while(!pRs->IsEOF())
    {
           nRecCount++;
           pRs->MoveNext();
    }
      

  8.   

    info_xsd:
         问题是我一使用MoveFirst()就出现越界错误,说明记录集无记录啊