FireDac 的RecordCount 相关测试 记录。
unit Unit4; interface uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, DBGridEhGrouping, ToolCtrlsEh,
DBGridEhToolCtrls, DynVarsEh, Vcl.StdCtrls, EhLibVCL, GridsEh, DBAxisGridsEh,
DBGridEh, FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Error,
FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def, FireDAC.Stan.Pool,
FireDAC.Stan.Async, FireDAC.Phys, FireDAC.VCLUI.Wait, Data.DB,
FireDAC.Comp.Client, FireDAC.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf,
FireDAC.DApt, FireDAC.Phys.MSSQLDef, FireDAC.Phys.ODBCBase,
FireDAC.Phys.MSSQL, FireDAC.Comp.UI, FireDAC.Comp.DataSet; type
TForm4 = class(TForm)
DBGridEh1: TDBGridEh;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
FDConnection1: TFDConnection;
FDGUIxWaitCursor1: TFDGUIxWaitCursor;
FDPhysMSSQLDriverLink1: TFDPhysMSSQLDriverLink;
DataSource1: TDataSource;
FDQuery1: TFDQuery;
Button5: TButton;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Button6: TButton;
Label2: TLabel;
Label1: TLabel;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form4: TForm4; implementation {$R *.dfm} procedure TForm4.Button1Click(Sender: TObject);
var
start: Cardinal;
begin
start := GetTickCount;
FDQuery1.Close;
FDQuery1.FetchOptions.Mode := fmOnDemand;
FDQuery1.FetchOptions.RecordCountMode := cmVisible;
FDQuery1.Open('SELECT * FROM top_trade');
Label1.Caption := Format('总数:%d,耗时:%d',[FDQuery1.RecordCount, GetTickCount - start]);
end; procedure TForm4.Button2Click(Sender: TObject);
var
start: Cardinal;
begin
start := GetTickCount;
FDQuery1.Close;
FDQuery1.FetchOptions.Mode := fmAll;
FDQuery1.FetchOptions.RecordCountMode := cmVisible;
FDQuery1.Open('SELECT * FROM top_trade');
Label3.Caption := Format('总数:%d,耗时:%d',[FDQuery1.RecordCount, GetTickCount - start]);
end; /// <summary>
/// 方法1,重新根据官方的Mode参数设置,获取全部数据,重新查一次
/// </summary>
procedure TForm4.Button3Click(Sender: TObject);
var
start: Cardinal;
begin
start := GetTickCount;
with TFDQuery.Create(nil) do
begin
Connection := FDConnection1;
FetchOptions.Mode := fmAll;
Open(FDQuery1.SQL.Text);
Label4.Caption := Format('总数:%d,耗时:%d',[RecordCount, GetTickCount - start]);
Free;
end;
end; /// <summary>
/// 方法2,依然是重新查一次,但是不获取全部数据,保持官方的默认参数,
/// 开启数据集单向 然后 调用last方法 跳到最后 然后取RecordNo
/// </summary>
procedure TForm4.Button4Click(Sender: TObject);
var
start: Cardinal;
begin
start := GetTickCount;
with TFDQuery.Create(nil) do
begin
Connection := FDConnection1;
FetchOptions.CursorKind := ckForwardOnly;{开启单向}
Open(FDQuery1.SQL.Text);
Last;
Label5.Caption := Format('总数:%d,耗时:%d',[RecNo, GetTickCount - start]);
Free;
end;
end; /// <summary>
/// 方法3,测试 RecordCountMode
/// 经过测试这个 依然是查的全部 与 FetchOptions.Mode := fmAll 一样,但如果仅仅获取总数要快很多。
/// </summary>
procedure TForm4.Button5Click(Sender: TObject);
var
start: Cardinal;
begin
start := GetTickCount;
with TFDQuery.Create(nil) do
begin
Connection := FDConnection1;
FetchOptions.RecordCountMode := cmTotal;
Open(FDQuery1.SQL.Text);
Label6.Caption := Format('总数:%d,耗时:%d',[RecordCount, GetTickCount - start]);
Free;
end;
end; procedure TForm4.Button6Click(Sender: TObject);
var
start: Cardinal;
begin
start := GetTickCount;
FDQuery1.Close;
FDQuery1.FetchOptions.Mode := fmOnDemand;
FDQuery1.FetchOptions.RecordCountMode := cmTotal;
FDQuery1.Open('SELECT * FROM top_trade');
Label2.Caption := Format('总数:%d,耗时:%d',[FDQuery1.RecordCount, GetTickCount - start]);
end; end.

DEMO 下载链接: http://files.cnblogs.com/files/del88/FireDac-DEMO.zip
事实证明,即保证速度 又保证 recordCount是总数的情况下,通过 FDQuery1.FetchOptions.RecordCountMode := cmTotal; 这行代码是最 快的
要想保证RecordCount是总数的情况下,且加载全部数据的情况下,测试结果:
FetchOptions.Mode := fmAll; ---- 耗时5秒
RecordCountMode := cmTotal; ----- 耗时2秒。
这两句都能显示全部数据。
FireDac 的RecordCount 相关测试 记录。的更多相关文章
- 【基于WinForm+Access局域网共享数据库的项目总结】之篇一:WinForm开发总体概述与技术实现
篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...
- Sybase 常用SQL
http://blog.chinaunix.net/uid-200142-id-3073894.html ===========================使用总结================ ...
- MVC中实现加载更多
需要实现的功能: 数据太多想初次加载部分数据,在底部加上“加载更多”按钮 点击后加载第二页数据(从数据库只取指定页数据)后接在已有数据后面(类似于android中的下拉加载更多) 每次加载时显示“正在 ...
- BIEE 10g 二次开发整理
近半年在公司做某个项目的时候,主要使用到了Oracle BIEE 10g这套工具.刚开始的时候,对OBIEE是七窍通了六窍,还是一窍不通. 现在已经摸索出些许门道,特整理出来:一来,备忘:二来,供大家 ...
- cPage分页详细介绍
asp.net中各种数据控件,datalist.gridview.Repeater等分页是最常用的功能,几乎任何一个B/S项目,无论是系统还是网站都会用到.分页时,读取整个数据,直接绑定到控件,都可以 ...
- SQL Server 常用命令使用方法
(1) 数据记录筛选: sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]" sql="select * f ...
- JAVA爬虫挖取CSDN博客文章
开门见山,看看这个教程的主要任务,就去csdn博客,挖取技术文章,我以<第一行代码–安卓>的作者为例,将他在csdn发表的额博客信息都挖取出来.因为郭神是我在大学期间比较崇拜的对象之一.他 ...
- EF下泛型分页方法,更新方法
/// <summary> /// 获取分页的分页集合 /// </summary> /// <typeparam name="S">实体类型& ...
- SSH2 框架下的分页
1.设计分页实体(pageBean) 这里我显示的是3-12页的方式: package cn.itcast.oa.domain; import java.util.List; /** * 封装分页信息 ...
随机推荐
- 用Sublime 3作为React Native的开发IDE- 转
转-http://www.cnblogs.com/wangshuo1/p/react_native_02.html Sublime Text是一个代码编辑器.也是HTML和散文先进的文本编辑器.漂亮的 ...
- PHP foreach使用
<?php $arr = array("1"=>"100","2"=>"200","3&qu ...
- python3-day2-python基础2
一.for循环 for循环是我们编程中非常常用的一种循环,以下就是for循环在python中的一些应用实例: 1.单层for循环 #!/usr/bin/env python3#-*- coding: ...
- Dual Number
http://ncatlab.org/nlab/show/dual+number http://mathworld.wolfram.com/DualNumber.html https://en.wik ...
- sip协议注册时response值的计算方法
sip注册时有四个步骤, 1.客户端向服务端发送不带Authorization字段的注册请求 2.服务端回401,在回复消息头中带WWW_Authorization 3.客户端向服务端发送带Autho ...
- randomAccess接口
http://www.blogjava.net/lzqdiy/archive/2007/04/22/112578.html
- CentOS下安装LAMP环境
1.安装Apache yum -y install httpd # 开机自启动 chkconfig httpd on # 启动httpd 服务 service httpd start #安装apach ...
- mybatis处理一对多的查询
//查询出某个班级对应的所有老师和学生 1.使用嵌套结果 <select id="findClasses3" parameterType="int" re ...
- [SQL]查询数据库里都有哪些自己建的表
方法一:SELECT * FROM FTCE_ACCS.INFORMATION_SCHEMA.TABLES Where TABLE_TYPE='BASE TABLE'----------------- ...
- JQuery easyui Datagrid 分页事件
easyui是Jquery中的一个轻量级UI插件,提供了一些诸如window.datagrid.button等控件.现在主要说说Datagrid中分页控件的使用. easyui中可以单独添加分页pag ...