一直想用Delphi 10 Seattle FireDAC 写个中间层,当然不得不解决连接池的问题。

网上搜到一个只有一点代码的例子,没有配置步骤,研究了半天的英文帮助文档,总算试验成功,给苦无资料的大家分享:

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;则是归还一个连接,不是断开,