FireDAC与ADO读写数据的性能测试

以前使用过BDE、ADO、DBX等数据引擎,后来发现它们都没有UNIDAC好用,

所以在很长的一段时间内中间件都使用UNIDAC作为数据引擎。

偶然的机会,使用了DELPHI XE5自带的FIREDAC数据引擎,在开发了几个项目以后

发现它完全可以同UNIDAC相媲美,但UNIDAC购买费用是几万美刀,而FIREDAC是免费的。

 

数据量2w行,字段30个

第一次open

fd读取数据用时363毫秒,ado用时783毫秒

第二次open

fd读取数据用时10毫秒,ado用时553毫秒

遍历所有记录

第一次

fd读取数据用时2438毫秒,ado用时5590毫秒

第二次

fd读取数据用时1988毫秒,ado用时5548毫秒

FireDac 组件说明一

TFDManager连接定义和Connect连接管理
TFDConnection

数据库连接组件,支持三种连接方式:1.持久定义(有一个唯一名称和一个配置文件,可以由FDManager管理)

例:

uses
  FireDAC.Comp.Client, FireDAC.Stan.Intf;
var
  oDef: IFDStanConnectionDef;
begin
  oDef := FDManager.ConnectionDefs.AddConnectionDef;
  oDef.Name := 'MSSQL_Connection';
  oDef.DriverID := 'MSSQL';
  oDef.Server := '127.0.0.1';
  oDef.Database := 'Northwind';
  oDef.OSAuthent := True;
  oDef.MarkPersistent;
  oDef.Apply;
  .....................
  FDConnection1.ConnectionDefName := 'MSSQL_Connection';
  FDConnection1.Connected := True;
end;
 

2.私有定义(有一个唯一名称可以由FDManager管理,无配置文件)

例:

var
  oParams: TStrings;
begin
  oParams := TStringList.Create;
  oParams.Add('Server=127.0.0.1');
  oParams.Add('Database=Northwind');
  oParams.Add('OSAuthent=Yes');
  FDManager.AddConnectionDef('MSSQL_Connection', 'MSSQL', oParams);
  .....................
  FDConnection1.ConnectionDefName := 'MSSQL_Connection';
  FDConnection1.Connected := True;
end;

3.临时定义(没有名称和配置文件,不能由FDManager管理,运行时将参数写入params属性)

例:

uses
  FireDAC.Phys.IBDef, FireDAC.Phys.IBWrapper;
......
FDConnection1.DriverName := 'IB';
with FDConnection1.Params as TFDPhysIBConnectionDefParams do begin
  Protocol := ipTCPIP;
  Server := '127.0.0.1';
  Database := 'c:\IB\employee.gdb';
  UserName := 'sysdba';
  Password := 'masterkey';
end;
FDConnection1.Connected := True;
2. FDConnection1.ConnectionString := 'DriverID=MSSQL;Server=127.0.0.1;Database=Northwind;User_name=sa';

FDConnection1.Connected := True;)

end;

TFDTransaction数据库事务管理
TADCommand执行SQL语句。不返回结果
TFDTableAdapter提供应用程序与数据之间的通信
TFDSchemaAdapter

集中缓存更新。非常重要且实用的组件。先要将数据集,设置CachedUpdates属性为True。

TFDMemTableFireDAC自家的内存表,三层必备的组件,也是非常重要,完全可以替代ClientDataSet
FDQuery类似于ADOQuery的组件,直接SQL语句并存储返回结果
TFDStoredProc执行服务器存储过程
TFDTable类似于ADOTable,数据库表数据集

FDUpdateSQL生成添加,删除,修改SQL语句
TFDMetaInfoQuery查询数据源信息
TFDEventAlerter

负责处理数据库事件通知

使用TFDEventAlerter类来处理数据库事件通知。
FDEventAlerter1.Options.Kind := 'DBMS_ALERT';
FDEventAlerter1.Names.Text := 'Customers';
FDEventAlerter1.Options.Synchronize := True;
FDEventAlerter1.Options.Timeout := 10000;
FDEventAlerter1.OnAlter := DoAlert;
FDEventAlerter1.OnTimeout := DoTimeout;
FDEventAlerter1.Active := True;
........
 
procedure TForm1.DoAlert(ASender: TFDCustomEventAlerter;
  const AEventName: String; const AArgument: Variant);
begin
  if CompareText(AEventName, 'Customers') = 0 then
    qryCustomers.Refresh;
end;
 
procedure TForm1.DoTimeout(ASender: TObject);
begin
  qryCustomers.Refresh;
end;
TFDLocalSQLSQLite-based本地SQL引擎
TFDGUIxErrorDialog错误对话框
TFDGUIxLoginDialog

登陆对话框

with FDGUIxLoginDialog1.VisibleItems do begin
  Clear;
  Add('Server');
  Add('User_name=Benutzer');
  Add('Password=Kennwort');
  Add('OSAuthent');
end;
FDConnection1.LoginDialog := FDGUIxLoginDialog1;
FDConnection1.Connected := True;
TFDGUIxAsyncExecuteDialog这个对话框显示了SQL查询执行的进展
TFDGUIxScriptDialog这个对话框显示了一个SQL脚本执行进展
TFDGUIxWaitCursor数据库游标控制,这个是强行加到FireDAC应该程序中的
TFDMoniRemoteClientLink使用TFDMoniRemoteClientLink组件链接FDMonitor跟踪功能,应用程序和设置
TFDMSAccessService实现Microsoft Access数据库的创建、删除、压缩和修复服务
TFDScript实现SQL脚本引擎,能够执行一系列SQL查询
TFDBatchMove不同数据源之间的数据转移
  • 16
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用 VBA 中的 ADO 连接 Excel 数据表获取数据需要以下步骤: 1. 引用 Microsoft ActiveX Data Objects 库。 在 VBA 编辑器中,依次点击菜单栏中的“工具”→“引用”,勾选“Microsoft ActiveX Data Objects 2.x 库”(其中的“x”表示版本号,您可以选择您电脑上已安装的版本)。 2. 创建 ADO 连接对象。 在 VBA 代码中,使用 `CreateObject` 方法创建 ADO 连接对象,并设置连接字符串。例如,以下代码创建了一个连接到 Excel 工作簿的连接对象: ``` Dim cn As Object Set cn = CreateObject("ADODB.Connection") cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\path\to\excel\workbook.xlsx;Extended Properties=""Excel 12.0;HDR=YES"";" ``` 其中 `Provider` 参数指定了使用的 OLE DB 提供程序,这里使用的是 Microsoft.ACE.OLEDB.12.0,它可以连接 Excel 文件。`Data Source` 参数指定了 Excel 文件的路径和文件名,`Extended Properties` 参数指定了 Excel 文件的属性,例如 `HDR=YES` 表示第一行是标题行。 3. 打开连接。 使用 `Open` 方法打开连接: ``` cn.Open ``` 4. 创建 ADO 命令对象。 在 VBA 代码中,使用 `CreateObject` 方法创建 ADO 命令对象,并设置 SQL 语句。例如,以下代码创建了一个查询 Excel 数据表的命令对象: ``` Dim cmd As Object Set cmd = CreateObject("ADODB.Command") cmd.ActiveConnection = cn cmd.CommandText = "SELECT * FROM [Sheet1$]" ``` 其中 `ActiveConnection` 属性指定了连接对象,`CommandText` 属性指定了 SQL 语句,这里查询了名为“Sheet1”的数据表的所有数据。 5. 执行命令并获取数据。 使用 `Execute` 方法执行命令,并使用 `Recordset` 属性获取查询结果。例如,以下代码执行命令并将结果保存到 `rs` 变量中: ``` Dim rs As Object Set rs = cmd.Execute ``` 您可以使用 `rs` 变量中的方法和属性获取查询结果,例如 `rs.Fields` 获取所有字段名,`rs.GetRows` 获取所有数据行。 6. 关闭连接。 使用 `Close` 方法关闭连接: ``` cn.Close ``` 完整的示例代码如下: ``` Sub GetExcelData() Dim cn As Object Dim cmd As Object Dim rs As Object '创建连接对象 Set cn = CreateObject("ADODB.Connection") cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\path\to\excel\workbook.xlsx;Extended Properties=""Excel 12.0;HDR=YES"";" '打开连接 cn.Open '创建命令对象 Set cmd = CreateObject("ADODB.Command") cmd.ActiveConnection = cn cmd.CommandText = "SELECT * FROM [Sheet1$]" '执行命令并获取数据 Set rs = cmd.Execute Debug.Print rs.Fields(0).Name Debug.Print rs.GetRows(10) '关闭连接 cn.Close End Sub ``` 注意,以上代码仅供参考,您需要根据您的实际情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蝈蝈(GuoGuo)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值