设置第二个TFDPhysFBDriverLink - 可能和必要吗?

设置第二个TFDPhysFBDriverLink - 可能和必要吗?

问题描述:

我的应用程序有一个设计时间TFDConnectionTFDPhysFBDriverLink源连接。这可能会或可能不会以Firebird嵌入模式打开(如果是,则设置FDPhysFBDriverLink.VendorLib := 'fbembed.dll'(32位))。设置第二个TFDPhysFBDriverLink - 可能和必要吗?

我创造出必须采用嵌入式火鸟,因为我们如果安装了PC(我们的设置用品fbembed.dll)上火鸟不知道运行时的目标TFDConnection

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

这是我正在转换的旧代码,使用DirectSQL,并且这也用于设置一些神奇的SDFib.SqlApiDLL := FBEMBED属性,该属性应该仅用于目标数据库。在您的情况

最坏的情况是安装火鸟,所以一个连接连接到安装的服务器实例,而另一个嵌入的一个。因为这足以拥有一个物理驱动对象,但没有更多的问题。

所以,滴形式或数据模块和设置其DriverID属性为唯一的名称上一个TFDPhysFBDriverLink(即不被用作基极驱动器的ID为任何驱动程序),并将其标记为Embedded(具有在情况下,没有实际意义当你在此时指定VendorLib,但你可以用它来识别驾驶者,FireDAC使用此属性仅适用于默认的库应加载)的决定。

那么对于一个连接使用您定义DriverID和另一个使用回退通过使用其BaseDriverID(我省略了不必要的设置此任务)为默认火鸟驱动程序设置:

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 } 
+0

什么是嵌入式财产吗?我找不到任何文档(* Embarcadero Technologies目前没有任何附加信息*) –

+0

如果没有设置VendorLib,它只加载'fbembed.dll'库而不是'fbclient.dll'。在这种情况下,它是无用的(因为您将指定'VendorLib'),但我已经将它用于未来可能的添加(您可以使用它来识别您的驱动程序)。 – Victoria

+0

好的,这个工作,谢谢。我使用了两种不同的TFDPhysFBDriverLinks。我注意到的一件事:我不应该*分配DriverName和DriverID。 –