先來學習一下基礎,此文是官方發布的,園子有個兄弟翻譯的https://www.cnblogs.com/Thenext/p/9715271.html
連接定義就是應用程序使用特定的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;
- #include <FireDAC.VCLUI.ConnEdit.hpp>
- TfrmFDGUIxFormsConnEdit * f = new TfrmFDGUIxFormsConnEdit(this);
- String sConnStr = DSServerModule1->FDConnection1->ResultConnectionDef->BuildString();
- if(f->Execute(sConnStr, ""))
- {
- DSServerModule1->FDConnection1->ResultConnectionDef->ParseString(sConnStr);
- DSServerModule1->FDConnection1->Connected = True;
- }
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 ,執行查詢 成功連接