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