关于ADO记录集GetRecordCount()返回记录条数-1的问题

ADO方式操作数据库我们通常使用GetRecordCount函数来快速判断一个打开的记录集里面总共有多少条记录,但在使用中有时却发现有时可能查不到任何的数据,跟踪发现GetRecordCount()返回值变成了-1,而且记录集里也有记录存在。

一般情况下当ADO不能确定记录条数,或者连接提供者、游标类型都不支持RecordCount的时候,RecordCount属性都将返回-1。

最常用的两个游标类型是:

adUseClient

使用由本地游标库提供的客户端游标。本地游标引擎通常允许使用的许多功能可能是驱动程序提供的游标无法使用的,因此使用该设置对于那些将要启用的功能是有好处的。adUseClientBatch与 adUseClient同义,也支持向后兼容性。

adUseServer

默认值。使用数据提供者或驱动程序提供的游标。这些游标有时非常灵活,对于其他用户对数据源所作的更改具有额外的敏感性。但是,Microsoft Client Cursor Provider(如已断开关联的记录集)的某些功能无法由服务器端游标模拟,通过该设置将无法使用这些功能。

这是MSDN上的解释,补充说明:使用adUseClient就是表示数据需要传输到客户端后再进行操作,不具有同步。它能更好的支持RecordCount属性,这样对性能的影响比较大,如果数据很多会更明显。adUseServer是直接在数据库中操作,处理的速度比较快。在其他的很多方面adUesServer很有限制。

如何正确使用RecordCount属性,我们只需在使用时设置好游标(静态/客户):

在m_pSet->Open()前加上:

m_pSet->CursorType = adOpenStatic;

m_pSet->CursorLocation = adUseClient;

时间: 2024-12-22 11:03:28

关于ADO记录集GetRecordCount()返回记录条数-1的问题的相关文章

ORACLE和SYBASE数据库中实现数据查询条数限制的SQL语句实现

一.概述 对于某些需要通过数据库与大量数据打交道的软件来说,处理性能相当的重要.为了保证软件能够将所有数据处理完而不至于崩溃,分批处理的思想应运而生.分批处理的具体做法是编写SQL语句,每次返回规定条数的数据给软件处理,待这一批数据处理完之后,再接着处理下一批. 本文通过对具体的数据库表(tb_employeeinfo)的操作过程,展示了ORACLE和SYBASE数据库中分批处理SQL语句的编写方法. 二.ORACLE数据库中的处理 首先,建立tb_employeeinfo表,其定义如下: be

Lucene查询条数限制

运用Lucene进行索引,在查询的时候是有条数限制的 1 public virtual TopFieldDocs Search(Query query, Filter filter, int n, Sort sort); 可以看到第三个参数是int类型,所以返回的条数为int最大值.因为Lucene为索引查询,所以不需要返回全部的数据,根据关键词返回匹配的数据,按照分值排序,int大小的数据足够筛选出匹配的正确数据.在运用Lucene查询的是否不易返回过多条数,这样会影响性能,一般1000条左右

存储过程不返回记录集导致ADO程序出错

HRESULT _hr = get_adoEOF(&_result); IsEOF()函数如下:其中ADOCG::_RecordsetPtr m_pRecordset; BOOL IsEOF()       {return m_pRecordset->adoEOF == VARIANT_TRUE;}; m_pRecordset->adoEOF 将执行下面的函数(见msado15.tli) 1    inline VARIANT_BOOL Recordset15::GetadoEOF (

CI codeigniter 查询 db query 返回 二维数组 返回 第一条记录

$r = $this->db->query("SELECT * FROM ych_borrow WHERE user_id=2"); $r->result_array();//返回二位数组 $r->row_array();//返回第一条数据的一维数组

DB2 SQL查询结果集自动编号、返回条数范围控制研究

DB2 SQL查询结果集自动编号.返回条数范围控制研究 摘要: DB2 SQL语句实现查询的记录自动编号.并根据编号进一步实现记录范围控制.分页查询. 环境: IBM DB2 Universal V9.1 Windows XP Professional 要求:写一个SQL语句,在查询结果中要显示出记录序号,这个序号是是根据记录顺序自动生成的. 测试初始化DB2 SQL脚本: drop table t_test; create table t_test (bs        bigint     

(03)odoo模型/记录集/公用操作

*模型  模型是业务对象的呈现 * 创建模型:    class Stage(models.Model):    _name = 'todo.task.stage'      _order = 'sequence,name'    _rec_name = 'name'    _table = 'todo_task_stage'        # _name 模型的标识符,用于引用    # _order 用于browsed时的记录的排序    # _rec_name 覆盖默认的name字段   

MySQL 分组之后如何统计记录条数 gourp by 之后的 count()

SELECT count(*) FROM 表名 WHERE 条件 // 这样查出来的是总记录条 SELECT count(*) FROM 表名 WHERE 条件 GROUP BY id //这样统计的会是每组的记录条数. 如何获得 第二个sql语句的总记录条数? 则是,如下: select count(*) from(SELECT count(*) FROM 表名 WHERE 条件 GROUP BY id ) a ; 注意: 子查询方式,MySQL中子结果集必须使用别名,而Oracle中不需要特

SQL Server里如何随机记录集

今天的文章,我想给你简单介绍下SQL Server里如何随机记录集. 1 SELECT * FROM Person.Person 2 ORDER BY NEWID() 3 GO 这会引入新的UNIQUEIDENTIFIER数据类型列,SQL Server会在那列上进行物理排序操作. 但是在记录集里列本身没有返回,因为ORDER BY子句在查询SELECT部分逻辑后发生,因此也不会改变记录集. 在SQL Server里,简单但很强大的方法用来随机化你的记录集. 感谢关注!

Mysql数据库连接、查询、记录集操作代码

Mysql数据库链接代码 function dbConnect($hostname,$username,$pass,$db_name,$pconnect =0) { $func=empty($pconnect) ? 'mysql_connect':'mysql_pconnect'; if(!$connect){ [email protected]$func($hostname,$username,$pass) or die("<font size='2'>Mysql_Error :