FireDAC數據連接池設置


先來學習一下基礎,此文是官方發布的,園子有個兄弟翻譯的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 ,執行查詢 成功連接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM