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 相关测试 记录。的更多相关文章

  1. 【基于WinForm+Access局域网共享数据库的项目总结】之篇一:WinForm开发总体概述与技术实现

    篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...

  2. Sybase 常用SQL

    http://blog.chinaunix.net/uid-200142-id-3073894.html ===========================使用总结================ ...

  3. MVC中实现加载更多

    需要实现的功能: 数据太多想初次加载部分数据,在底部加上“加载更多”按钮 点击后加载第二页数据(从数据库只取指定页数据)后接在已有数据后面(类似于android中的下拉加载更多) 每次加载时显示“正在 ...

  4. BIEE 10g 二次开发整理

    近半年在公司做某个项目的时候,主要使用到了Oracle BIEE 10g这套工具.刚开始的时候,对OBIEE是七窍通了六窍,还是一窍不通. 现在已经摸索出些许门道,特整理出来:一来,备忘:二来,供大家 ...

  5. cPage分页详细介绍

    asp.net中各种数据控件,datalist.gridview.Repeater等分页是最常用的功能,几乎任何一个B/S项目,无论是系统还是网站都会用到.分页时,读取整个数据,直接绑定到控件,都可以 ...

  6. SQL Server 常用命令使用方法

    (1) 数据记录筛选: sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]" sql="select * f ...

  7. JAVA爬虫挖取CSDN博客文章

    开门见山,看看这个教程的主要任务,就去csdn博客,挖取技术文章,我以<第一行代码–安卓>的作者为例,将他在csdn发表的额博客信息都挖取出来.因为郭神是我在大学期间比较崇拜的对象之一.他 ...

  8. EF下泛型分页方法,更新方法

    /// <summary> /// 获取分页的分页集合 /// </summary> /// <typeparam name="S">实体类型& ...

  9. SSH2 框架下的分页

    1.设计分页实体(pageBean) 这里我显示的是3-12页的方式: package cn.itcast.oa.domain; import java.util.List; /** * 封装分页信息 ...

随机推荐

  1. 设置XtraForm标题居中

    public class CustomFormPainter : FormPainter { public CustomFormPainter(Control owner, DevExpress.Sk ...

  2. Jquery 防止页面刷新

    1.禁止鼠标右键功能$(document).ready(function() { $(document).bind("contextmenu",function(e) { aler ...

  3. jq 获取元素的宽度时,如何取得小数部分

    <!DOCTYPE html> <html> <head> <title></title> <meta name="arti ...

  4. My Tornado Particle Effect

    These animations are more able to demostrate this plugin than the following static images. :) test 1 ...

  5. eclispe---快捷键设置

    1,eclipse自动补全的设置(自动提示) 2014-11-03 14:51:43 如果你用过Visual Studio的自动补全功能后,再来用eclipse的自动补全功能,相信大家会有些许失望. ...

  6. php 对url 操作类:url拼接、get获取页面、post获取页面(带传参)

    /* * @brief url封装类,将常用的url请求操作封装在一起 * */ class URL{ private $error; public function __construct(){ $ ...

  7. 三种Singleton的实现方式

    来源:http://melin.iteye.com/blog/838258 三种Singleton的实现方式,一种是用大家熟悉的DCL,另外两种使用cas特性来实现. public class Laz ...

  8. 合并两个java bean对象非空属性(泛型)

    import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; cl ...

  9. linux 安装beyond compare

    安装好后,在终端运行bcompare  就ok

  10. HDU 4003 [树][贪心][背包]

    /* 大连热身A题 不要低头,不要放弃,不要气馁,不要慌张 题意: 给一棵树,每条边上有权值.给一个起点,放置n个机器人,要求使得任意一个节点至少被一个机器人经过. 每个机器人经过某条边时的代价为这条 ...