设置第二个TFDPhysFBDriverLink - 可行且必要吗?

时间:2017-10-11 15:05:34

标签: delphi driver firebird firedac delphi-10.2-tokyo

我的应用程序的设计时间为TFDConnectionTFDPhysFBDriverLink为源连接。这可能会或可能不会在Firebird嵌入模式下打开(如果是,FDPhysFBDriverLink.VendorLib := 'fbembed.dll'已设置(32位)。)

我创建了一个运行时目标TFDConnection,其中必须使用嵌入式Firebird,因为我们不知道Firebird是否安装在PC上(我们的设置供应fbembed.dll)。

如何设置?在运行时,我可以创建另一个TFDPhysFBDriverLink并设置其VendorLib,但FireDAC如何知道其关联连接是什么?或者我可以在应用程序中只使用一个FDPhysFBDriverLink吗?

这是我使用DirectSQL转换的旧代码,这也用于设置一些魔术SDFib.SqlApiDLL := FBEMBED属性,该属性据说仅适用于目标数据库。

1 个答案:

答案 0 :(得分:1)

在您的情况下,最糟糕的情况是安装了Firebird,因此一个连接连接到已安装的服务器实例,而另一个连接连接到嵌入式服务器实例。因为这足以拥有一个物理驱动程序对象,但是有更多的没有问题。

因此,在表单或数据模块上放一个TFDPhysFBDriverLink并将其DriverID属性设置为唯一名称(不用作任何驱动程序的基本驱动程序ID),并将其标记为{{ 3}}(当你在此时指定Embedded时没有实际意义,但你可以使用它来识别驱动程序; FireDAC仅使用此属性来决定应该加载哪个默认库)。

然后,对于一个连接,使用您定义的VendorLib,并使用其DriverID使用回退到默认的Firebird驱动程序设置(我省略了此任务不必要的设置):

FDPhysFBDriverLink1.DriverID := 'FBEmbedded'; { ← ID not used by any BaseDriverID }
FDPhysFBDriverLink1.Embedded := True; { ← not mandatory when VendorLib is specified }
FDPhysFBDriverLink1.VendorLib := 'C:\fbembed.dll'; { ← client library file name }

FDConnection1.Params.DriverID := 'FB'; { ← driver's BaseDriverID }
FDConnection1.Open; { ← this will connect to the installed server }

FDConnection2.Params.DriverID := 'FBEmbedded'; { ← driver's DriverID }
FDConnection2.Open; { ← this will connect to the embedded server }

但我更喜欢有两个单独的驱动程序对象,一个用于已安装的服务器(具有默认设置,如基本驱动程序)和一个用于嵌入式服务器。例如:

FDPhysFBDriverLink1.DriverID := 'FBEmbedded'; { ← ID not used by any BaseDriverID }
FDPhysFBDriverLink1.Embedded := True; { ← not mandatory when VendorLib is specified }
FDPhysFBDriverLink1.VendorLib := 'C:\fbembed.dll'; { ← client library file name }

FDPhysFBDriverLink2.DriverID := 'FBInstalled'; { ← ID not used by any BaseDriverID }

FDConnection1.Params.DriverID := 'FBEmbedded'; { ← driver 1 DriverID }
FDConnection1.Open; { ← this will connect to the embedded server }

FDConnection2.Params.DriverID := 'FBInstalled'; { ← driver 2 DriverID }
FDConnection2.Open; { ← this will connect to the installed server }