FireDAC数据连接池设置

Posted on 2020-06-14 20:37  墨者工作室  阅读(1515)  评论(0编辑  收藏  举报

先来学习一下基础,此文是官方发布的,园子有个兄弟翻译的https://www.cnblogs.com/Thenext/p/9715271.html

 一.Defining Connection (FireDAC)(连接定义)

 连接定义就是应用程序使用特定的FireDAC驱动连接数据库的参数集合。相当于BDE的别名,ADO的UDL,或者ODBC的DSN。

For the list of supported database management systems and corresponding parameters, see FireDAC Database Connectivity.

FireDAC支持三种连接定义:

FireDAC支持三种连接定义:

Type

Description

Pros

Cons

Persistent

固定连接

 

1.有个唯一名称,

2.由FDManager负责管理,

3.保存在一个连接定义文件中。

可能定义一次并在多个应用程序中交叉重复使用。可以被用于连接池

(server address, DB name, 等)参数公共可见并且可能随时改变。FDManager必须重新激活或者重启IDE以使新加的连接定义在设计时可见.

Private

私有连接

1.有个唯一名称,

2.由FDManager负责管理,

3.不保存在连接定义文件中。

定义连接的参数在应用程序之外不可见。可用于连接池。

当每个程序重启后,应用程序需要建立个私有连接,其它程序不能共享。不能在设计时建立.

Temporary

临时连接

1.没有唯一名称,

2.不由FDManager管理

3.不保存在连接定义文件中。

最简易建立连接定义的方法,通过填写 TFDConnection.Params 属性来完成. 可以在设计时通过TFDConnection component editor 输入参数来完成连接定义.

私有连接简单,不能用名称引用,不能用于连接池。

Connection Definition File

固定连接保存在一个外部文件 - 连接定义文件中。

此文件是标准的INI文本文件,可首先选择用 FDExplorer 或 FDAdministrator 实用程序来编辑, 也可手动或用代码来编辑。. 系统默认文件是C:\Users\Public\Documents\Embarcadero\Studio\14.0\FireDAC\FDConnectionDefs.ini.

注意:当你使用 FDExplorer or FDAdministrator 建立一个固定连接,且当RAD Studio IDE 运行中, 会看不到 FireDAC 设计时代码. 要刷新连接定义列表,你需要重启 FDManager 或 RAD Studio IDE.

Sample content of this file:

[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 在下面位置搜索连接定义文件:

·指定了连接定义文件名:

·文件名不带路径时,在应用程序文件夹下搜索该文件名。

·带路径的文件名则直接搜索它。

·没有指定连接定义文件名:

·在应用程序文件夹中搜索FDConnectionDefs.ini 文件。

·如果文件没有找到,则搜索 HKCU\Software\Embarcadero\FireDAC\ConnectionDefFile. 默认是 C:\Users\Public\Documents\Embarcadero\Studio\14.0\FireDAC\FDConnectionDefs.ini.

注意: 在设计时期 FireDAC 忽略  FDManager.ConnectionDefFileName的值, 只在RAD Studio Bin 文件夹或registry指定位置寻找, 如果找不到文件,抛出异常。

如果FDManager.ConnectionDefFileAutoLoad 为 True, 自动调用连接定义文件,否则,必须在第一个连接定义信息使用之前用FDManager.LoadConnectionDefFile方法来调用文件。例如设定TFDConnection.Connected 为 True之前.

Creating a Persistent Connection Definition

建立固定连接定义

可以使用 FDExplorer or FDAdministrator建立固定连接定义。 这是如何在代码中实现。可以看例子 FireDAC\Samples\Comp Layer\TFDConnection\ConnectionDefs.

下面代码段建立一个名为 "MSSQL_Connection"的连接定义,带所有所需参数连接到 Microsoft SQL Server 本地连接, 使用了 OS authentication (SSPI):

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;

FDManager 在 FireDAC连接管理中是一个全局对象. 其属性 FDManager.ConnectionDefs: IFDStanConnectionDefs 是在固定连接和私有连接中的一个集合。 AddConnectionDef 方法添加一个新连接定义。 MarkPersistent 方法标记连接定义为固定连接定义。 Apply 方法保存连接定义到连接定义文件中。没有调用MarkPersistent ,表示是私有连接定义。.

Creating a Private Connection Definition

私有连接定义只能用代码建立。和上面的代码类似,只是不必调用MarkPersistent 即可。

Also, you can use a technique similar to BDE:

你也可类似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;

Creating a Temporary Connection Definition

临时连接可以在设计期用FireDAC Connection Editor来建立. 双击 TFDConnection 即可打开:

 

Or at run time in code by filling the TFDConnection.Params property.

或者在运行时填充参数,这是最简单的建立连接定义的方法。

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.ConnectionString 属性。 A connection string may be a convenient way to specify connection definition parameters for certain types of applications. 在应用程序已知类型的连接参数情况下,使用连接字符串定义连接会是一个不错的方法。For example:

FDConnection1.ConnectionString := 'DriverID=MSSQL;Server=127.0.0.1;Database=Northwind;User_name=sa';

FDConnection1.Connected := True;

Editing a Connection Definition

应用程序可能需要在运行时使用标准FireDAC编辑对话框建立和编辑连接定义的能力,来编辑保存在TFDConnection中的临时连接定义,使用以下代码::

uses

  FireDAC.VCLUI.ConnEdit;

...

if TfrmFDGUIxFormsConnEdit.Execute(FDConnection1, '') then

  FDConnection1.Connected := True;

To edit a connection definition represented as a FireDAC connection string, use the code:

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;

 

[cpp] view plain copy
 
  1. #include <FireDAC.VCLUI.ConnEdit.hpp>  
  2.   
  3.   
  4.   TfrmFDGUIxFormsConnEdit * f = new TfrmFDGUIxFormsConnEdit(this);  
  5.   String sConnStr = DSServerModule1->FDConnection1->ResultConnectionDef->BuildString();  
  6.   
  7. if(f->Execute(sConnStr, ""))  
  8. {  
  9.   DSServerModule1->FDConnection1->ResultConnectionDef->ParseString(sConnStr);  
  10.   DSServerModule1->FDConnection1->Connected = True;  
  11. }  

  

FireDAC 连接池配置过程 https://blog.csdn.net/zcpxieqing/article/details/50033633

1、先建一个数据库的文本参数文件,文件名FDDrivers.ini,存放在执行文件所在目录,内容以oracle为例如下:

[Oracle_Pool]
DriverID=Ora
Database=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.1.220)(PORT = 1521)))(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = orcl)))
User_Name=test
Password=test
CharacterSet=UTF8
Pooled=true

这里Pooled=true是不能少的,是连接池里的关键设置哦

2、在数据模块里,放置FDManager1控件,并将其ConnectionDefFileName指向FDDrivers.ini文件,如D:\FDmanager\Win32\Debug\FDDrivers.ini,并把Active设为true

3、在数据模块里里,放置FDPhysOracleDriverLink,并将其VenderLib指向oracle的库文件D:\FDmanager\Win32\Debug\oci.dll,这里要说明的是,需要四个库文件:

oci.dll,oraocci11.dll,,oraociei11.dll,orasql11.dll,这些文件全部都放在执行文件所在目录。

4、还要放置FDGUIxWaitCursor在数据模块里

5、放置数据库连接控件FDConnection,在数据模块里,并将其ConnectionDefName指定为FDDrivers.ini文件中的第一行中的名称,可以下拉选的

6、这样设置好后,在窗口代码里,就可以按如下调用:

procedure Tfrm1.Button2Click(Sender: TObject);
begin
 if not dm.FDConnection1.Connected then
   dm.FDConnection1.Connected := True;
   with dm.FDQuery2 do
   begin
       close;
       sql.Clear;
       sql.Add('select count(*) num from base_tab ');
       open;
   end;
   Label2.Text:=dm.FDQuery2.FieldByName('num').AsString;
    dm.FDConnection1.Connected := False;

end;

注意,这里的dm.FDConnection1.Connected := True就是在连接池里获取一个连接,而dm.FDConnection1.Connected := False;则是归还一个连接,不是断开,

两文看完,基本大功告成,但是不是知道是 FireDac 连接是不是设计有问题,如果在设置了FDConnection.ConnectionDefNam的值并成功获取值后就无法连接了,

以下是我在实际使用中成功连接的过程:

1.添加一个FDConnection和FDManager

2.配置连接文件:以下是我的ini文件

   

[MYSQL_Demo]
DriverID=MySQL
Server=127.0.0.1
Database=pdb
User_Name=root
Password=
Pooled=True
server=localhost
port=3306
CharacterSet=UTF8  //不设置有可能显示乱码

2.设置FDManager 以上是在属性窗口上设置

 FDManager.connectionDefFileName:=XXX.ini   //ini文件名先设置为绝对路径,不然有可能无法找到配置,调式确定后再删除路径,只留文件名

FDManager.Active:=True   打开管理组件

3.设置FDConnection

  FDConnection.connectionDefName=MYSQL_Demo    //连接配置文件中的连接名

4.测试连接

 1-3步后,FDConnection已经从FDManager中自动获取并设置了自己的连接参数,这时最好不要去手动再进行修改,一但进行了修改可能无法连接,至少我修改了马上就不能连接了。

双击FDConnection,一般不需要更改,因为参数都是从配置文件中读取的,要修改就要修改配置文件,点 TEST,如果连接成功,点OK。

5.再回到IDE,添加 FDPhysMySQLDriverLink1 FDGUIxWaitCursor1 FDQuery ,执行查询 成功连接

Copyright © 2024 墨者工作室
Powered by .NET 9.0 on Kubernetes