UniDAC 的 RecordCount 属性注意事项

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
UniQuery_sqlite.close;
UniQuery_sqlite.SQL.Clear;
UniQuery_sqlite.SQL.Add('SELECT * FROM TABLE');
try
  UniQuery_sqlite.Open;
except
  { TODO : 异常捕获 }
end;
//循环出所有记录
fori := 0to UniQuery_sqlite.RecordCount - 1do
begin
   //....
   UniQuery_sqlite.Next;
end;

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

可见这个属性是为了性能考虑的,既然默认设置成25,肯定是最佳设置了,还是不改为何,于是寻求其他解决办法,网上又搜到了这样一个解释:
If 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了,已经是正确的行数了。为了找到权威的解释,又搜了一下帮助文档,解释如下:

特别是这一句: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.

------------------------------------------------------------------------------------------------

以上方法未找到地方,我的解决方案:

UniQryTest.Close; 
UniQryTest.SQL.Text := 'select * from tb_system_user';
// UniQryTest.FetchingAll;注释后就是默认每次加载25条记录,取消注释就全部读取
UniQryTest.DisableControls;    
UniQryTest.Open; 
UniQryTest.EnableControls;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值