一、定义连接(FireDAC)
概述
连接定义是一组参数,它定义了如何使用特定的FireDAC驱动将一个应用程序连接到DBMS。它相当于一个BDE别名、ADO UDL(存储的OLEDB连接字符串)或ODBC数据源名称(DSN)。关于支持的数据库管理系统和相应的参数列表,见FireDAC数据库连接。
FireDAC支持3种连接定义:
Type | Description | Pros | Cons |
持久型 Persistent | 有一个唯一的名字,由FDManager管理,并存储在一个连接定义文件中。 | 可以一次性定义并在许多应用中重复使用。可以集中使用(连接池)。 | 这些参数(服务器地址、数据库名称等)是公开的,并且可能会被修改。 是公开可见的,可能会被偶然地改变。 FDManager必须被重新激活或Delphi IDE必须被重新启动以使新添加的定义在设计时可见。 |
私有型 Private | 有一个唯一的名字,由FDManager管理,但不存储在连接定义文件中。 | 连接定义参数在应用程序 "外部 "不可见。可能会被集中起来。 | 应用程序需要在每个程序重新启动后创建一个私人连接定义,并且不能与其他程序共享它。程序共享。 不能在设计时创建。 |
临时型 Temporary | 没有名字,没有存储在连接定义文件中,也没有被FDManager管理。 | 创建一个连接定义的最简单方法是填写TFDConnection.Params 属性。可以在设计时使用TFDConnection组件编辑器来创建。 | 与私有型类似。也不能通过名称来引用,也不能被汇集。 |
连接定义文件
持久的连接定义存储在一个外部文件中--连接定义文件。这个文件是标准的INI文本文件格式。它可以由 FDExplorer 或 FDAdministrator 实用程序首先手动编辑,或通过代码编辑。默认情况下,该文件是C:\Users\Public\Documents\Embarcadero\Studio\FireDAC\FDConnectionDefs.ini。
注意:
如果你在RAD Studio IDE运行时使用FDExplorer或FDAdministrator添加一个新的持久性连接定义,它对FireDAC设计时代码是不可见的。要刷新持久性连接定义列表,你需要重新激活FDManager或重新启动RAD Studio IDE。
这个文件的内容样本如下:
[Oracle_Demo]
DriverID=Ora
Database=ORA_920_APP
User_Name=ADDemo
Password=a
MetaDefSchema=ADDemo
;MonitorBy=Remote
[MSSQL_Demo]
DriverID=MSSQL
Server=127.0.0.1
Database=Northwind
User_Name=sa
Password=
MetaDefSchema=dbo
MetaDefCatalog=Northwind
MonitorBy=Remote
应用程序可以在FDManager.ConnectionDefFileName属性中指定一个连接定义文件的名称。FireDAC在以下地方搜索连接定义文件:
如果指定了ConnectionDefFileName:
搜索一个没有路径的文件名,然后在应用程序EXE文件夹中寻找它。
否则就使用指定的文件名。
如果没有指定ConnectionDefFileName:
在一个应用程序EXE文件夹中寻找FDConnectionDefs.ini。
如果没有找到上述文件,请寻找注册表键HKCU\Software\Embarcadero\FireDAC\ConnectionDefFile中指定的文件。默认是C:\Users\Public\Documents\Embarcadero\Studio\FireDAC\FDConnectionDefs.ini。
注意:
在设计时,FireDAC会忽略FDManager.ConnectionDefFileName的值,并在RAD Studio Bin文件夹中或在注册表中指定的位置寻找一个文件。如果没有找到该文件,就会产生一个异常。
如果FDManager.ConnectionDefFileAutoLoad为True,连接定义文件会自动加载。否则,在第一次使用连接定义之前,必须通过调用FDManager.LoadConnectionDefFile方法显式加载它。例如,在设置TFDConnection.Connected为True之前。
创建持久性连接的定义
一个持久的连接定义可以用FDExplorer或FDAdministrator创建。这里是你如何在代码中做到这一点。也请看演示的连接定义。
下面的代码片段创建了一个名为 "MSSQL_Connection "的连接定义,它具有连接到本地运行的Microsoft SQL Server所需的所有参数,使用操作系统认证(SSPI)。
uses
FireDAC.Comp.Client, FireDAC.Stan.Def, FireDAC.Stan.Intf,
// Required uses for creating a persistent connection with MSSQL (to fdconnectiondefs.ini)
FireDAC.Phys.MSSQL,
FireDAC.Phys.MSSQLDef;
const
cNameConnDef = 'MSSQL_Connection';
procedure TForm1.PersistentConnectionClick(Sender: TObject);
var
oDef: IFDStanConnectionDef;
oParams: TFDPhysMSSQLConnectionDefParams; // MSSQL connection params
begin
// Adding new persistent connection to fdconnectiondefs.ini
FDManager.ConnectionDefs.AddConnectionDef;
oDef := FDManager.ConnectionDefs.AddConnectionDef;
oDef.Name := cNameConnDef;
oParams := TFDPhysMSSQLConnectionDefParams(oDef.Params);
oParams.DriverID := 'MSSQL'
oParams.Database := 'Northwind';
oParams.UserName := '.............';
oParams.Password := '.............';
oParams.Server := '127.0.0.1';
oParams.OSAuthent := false;
oParams.MARS := false;
oDef.MarkPersistent;
oDef.Apply;
end;
.....................
procedure TForm1.ConnectionClick(Sender: TObject);
FDConnection1.ConnectionDefName := cNameConnDef;
FDConnection1.Connected := True;
end;
FDManager是一个FireDAC连接管理器的全局实例。它的属性IFDStanConnectionDefs是一个持久化和私有化连接定义的集合。AddConnectionDef方法添加一个新的连接定义。MarkPersistent方法标记一个连接定义为持久化。Apply方法将一个连接定义保存到一个连接定义文件中。如果没有MarkPersistent的调用,连接定义是私有的。
4. 创建一个私有连接的定义
只有在代码中才能创建一个私有连接定义。下面代码与上面的代码相似,但没有MarkPersistent调用。
另外,你可以使用类似于BDE的技术。
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;
5. 创建一个临时连接定义
在设计时可以使用FireDAC连接编辑器在设计时创建一个临时连接定义。为了做到这一点,双击一个TFDConnection来调用编辑器。
或者在设计模式下点击TFDConnection图标,从对象检查器的DriverName属性中选择驱动程序。之后,展开Params属性并设置所需的属性。最后一步是将Connected属性设置为True。
在运行时要在代码中创建一个临时连接,请填写TFDConnection.Params属性。这是最简单和最方便的创建连接定义的方法。
FDConnection1.DriverName := 'MSSQL';
FDConnection1.Params.Add('Server=127.0.0.1');
FDConnection1.Params.Add('Database=Northwind');
FDConnection1.Params.Add('User_name=sa');
FDConnection1.Connected := True;
另一种在运行时创建临时连接定义的方法是将TFDConnection.Params属性投给一个DBMS特定的类。这是创建连接定义的最安全的方法,因为可以用IDE的Code Insight和编译器的语法检查来检查其正确性。
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;
另一个选择是在运行时通过填充TFDConnection.ConnectionString属性来指定一个连接字符串。连接字符串可能是为某些类型的应用程序指定连接定义参数的一种方便方式。比如说:
FDConnection1.ConnectionString := 'DriverID=MSSQL;Server=127.0.0.1;Database=Northwind;User_name=sa';
FDConnection1.Connected := True;
6.编辑一个连接定义
一个应用程序可能需要在运行时使用标准的FireDAC连接编辑器对话框来创建和编辑连接定义的能力。要编辑存储在TFDConnection中的临时连接定义,请使用以下代码:
uses
FireDAC.VCLUI.ConnEdit;
...
if TfrmFDGUIxFormsConnEdit.Execute(FDConnection1, '') then
FDConnection1.Connected := True;
要编辑一个以FireDAC连接字符串表示的连接定义,使用代码:
uses
FireDAC.VCLUI.ConnEdit;
...
var
sConnStr: String;
...
sConnStr := FDConnection1.ResultConnectionDef.BuildString();
if TfrmFDGUIxFormsConnEdit.Execute(sConnStr, '') then begin
FDConnection1.ResultConnectionDef.ParseString(sConnStr);
FDConnection1.Connected := True;
end;