设置第二个TFDPhysFBDriverLink - 可能和必要吗?
我的应用程序有一个设计时间TFDConnection
和TFDPhysFBDriverLink
源连接。这可能会或可能不会以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 }
什么是嵌入式财产吗?我找不到任何文档(* Embarcadero Technologies目前没有任何附加信息*) –
如果没有设置VendorLib,它只加载'fbembed.dll'库而不是'fbclient.dll'。在这种情况下,它是无用的(因为您将指定'VendorLib'),但我已经将它用于未来可能的添加(您可以使用它来识别您的驱动程序)。 – Victoria
好的,这个工作,谢谢。我使用了两种不同的TFDPhysFBDriverLinks。我注意到的一件事:我不应该*分配DriverName和DriverID。 –