UniDAC 的 RecordCount 属性注意事项 .

本文详细阐述了在使用UniDAC数据库查询组件时遇到的问题,即默认的FetchRows属性导致只查询到部分记录。通过将QueryRecCount属性设置为true,成功解决了该问题,并获取到了正确的记录数量。

转载http://www.pfeng.org/archives/58/

 

一直以来都是用UniDAC作为数据库查询组件,而一般的写法都是这样:

 
01UniQuery_sqlite.close;
02      UniQuery_sqlite.SQL.Clear;
03      UniQuery_sqlite.SQL.Add('SELECT * FROM TABLE');
04      try
05        UniQuery_sqlite.Open;
06      except
07        { TODO : 异常捕获 }
08      end;
09      //循环出所有记录
10      fori :=0toUniQuery_sqlite.RecordCount -1do
11      begin
12         //....
13         UniQuery_sqlite.Next;
14      end;

今天突然发现一个问题,明明数据库里存在近百条记录,但只查出来了25条,仔细检查了代码,没有问题啊,于是又检查了UniDAC UniQuery的属性,发现有这样一个属性: FetchRows,而且默认值是25!肯定是这里的问题了,帮助里搜了一下这个属性,帮助解释如下:

2011-06-08_163522.jpg大小: 154.69 K浏览: 9 次
可见这个属性是为了性能考虑的,既然默认设置成25,肯定是最佳设置了,还是不改为何,于是寻求其他解决办法,网上又搜到了这样一个解释:
1If you set the QueryRecCount option to True, TUniTable executes SELECT COUNT() query automatically when you open the table, and assigns the correct value to the RecordCount property.

于是,我试着把QueryRecCount属性设置为true,问题解决了,showmessage了一下recordcount,不再是25了,已经是正确的行数了。为了找到权威的解释,又搜了一下帮助文档,解释如下:

2011-06-08_164040.jpg大小: 174.86 K浏览: 9 次
特别是这一句:Used for TCustomDADataSet to perform additional query to get the record count for this SELECT, so the RecordCount property reflects the actual number of records.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值