打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
艺见钟情: FireDac初步

FireDac的的初步2

FireDac和UniDac一样了,也支持所谓的连接池,但是限制比较多。

要支持连接池,必须让FDManager连管理,也就是,必须:1,FDConnectionDefs.ini在定义一个连接,2,必须FDConnection的Params必须是空的。第二个条件比较容易理解,因为要是不同的FDConnection指定了不同的连接参数,那么连接池里面的连接属性肯定需要不一样才行。第一个条件就比较恶心了,莫非都得需要这个配置文件才可??岂不是App都要带一个这个FDConnectionDefs.ini??

仔细看了这里

发现可以定义FireDAC supports 3 connection definition kinds:的Private类型也可以只是Pool。

代码如下了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure TForm1.FormCreate(Sender: TObject);
var
  oParams: TStrings;
begin
  with FDManager do
  begin
    oParams := TStringList.Create;
    oParams.Add('Database=xxx.xxx.xxx.xxx:1521/orac');
    oParams.Add('Pooled=True');
    oParams.Add('DriverID=Ora');
    oParams.Add('User_Name=username');
    oParams.Add('Password=password');
    oParams.Add('OSAuthent=No');
    oParams.Add('POOL_MaximumItems=1'); //搞一个测试看看
    FDManager.AddConnectionDef('Ora_Pooled', 'Ora', oParams);
    FreeAndNil(oParams);
  end;
end;
  
这样就可以定义一个 Private的连接了
 
另外,看了文档,也明白了,连接定义FDConnectionDefs.ini的名字可以自己起,然后设置上 FDManagerConnectionDefFileName就可以,这样还灵活一点点。 
这个【Private】的意思,没看明白,因为就算【Persistent】也肯定是不能跨Exe来Pool的。
 
连接池的使用,直接定义一个conn,然后设置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TForm1.Button1Click(Sender: TObject);
var
  conn: TFDCustomConnection;
begin
  conn := TFDCustomConnection.Create(nil);
  conn.ConnectionDefName := 'Ora_Pooled';
  FDQuery1.Connection := conn;
  FDQuery1.Active := True;
  conn := TFDCustomConnection.Create(nil);
  conn.ConnectionDefName := 'Ora_Pooled';
  FDQuery2.Connection := conn;
  FDQuery2.Active := True;
end;
启动了pool后,conn的close也不是真的close,只是还给pool。 当超过
POOL_MaximumItems定义的值时,conn的发起连接时就会报异常了。
监视oracle会发现有两个连接连接上了。
另外连接池和
  FDManager.AcquireConnection
  FDManager.ReleaseConnection
一分钱关系都没有

 

FireDAC的初步1

把AnyDac买进来后,Embarcadero重新起了个名字叫FireDAC,以前用RO时挂过AnyDAC,当时觉得deploy程序的时候,配置太繁琐了,也一直没用,因为有UniDAC的存在,AnyDac的确是既生瑜何生亮。选择UniDac的另一个原因是,UniDac对Oracle的Direct连接,不需要套Oracle客户端dll,deploy时真的时方便又快捷。

UniDac是要钱的,打算再次摸一摸FireDac,做个笔记,记录一下。另外老被吹嘘的dbExpress也算是寿终正寝了。目前FireDac的Driver是不支持DataSnap的,估计dbExpress还会保留一段时间。

基本上,我都是用Oracle,所以比较关心without oracle client的数据库连接是否能做到。

测试了几下,FireDac连接Oracle,在没有Oracle Client的情况下,是可以连接上的。方式是

前提:需要文件

    oci.dll
    oraocci11.dll
    oraociei11.dll
    orasql11.dll

这几个文件,可以放在exe同一个目录下,或者path里面能找到得到的地方。有了这4个文件,就可以连接oracle了

具体参考了这个

我不喜欢tnsname.ora的配置,因为需要外挂一个配置文件。还是Oracle easy connect string方式来的最简单直接,形式如

OraSrv:1521/orcl ,这个就和UniDac的Direct连接时指定(OraSrv:1521:orc)差不多了。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
在VB6.0中如何连接Oracle10G 数据库表,和如何取得表中数据
conn / as sysdba遇到ORA
ORACLE实例和ORACLE数据库详解
C#连接Oracle数据库的简单应用 - 戛戛 - 博客园
登录 oracle 时 ORA-01034 和 ORA-27101 的解决办法
数据库_J2EE应用中与Oracle数据库的连接
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服