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

46qrfjad  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(107)

我的应用程序有一个设计时TFDConnectionTFDPhysFBDriverLink作为源连接。这可能会或可能不会在Firebird嵌入式模式下打开(如果是这样,则设置FDPhysFBDriverLink.VendorLib := 'fbembed.dll'(32位))。
我创建了一个运行时目标TFDConnection,它 * 必须 * 使用嵌入式Firebird,因为我们不知道PC上是否安装了Firebird(我们的设置提供了fbembed.dll)。
我该如何设置?在运行时,我可以创建另一个TFDPhysFBDriverLink并设置它的VendorLib,但是FireDAC如何知道它的关联连接是什么?或者我可以在应用程序中只使用一个FDPhysFBDriverLink吗?
这是我正在转换的旧代码,使用DirectSQL,这也用于设置一些神奇的SDFib.SqlApiDLL := FBEMBED属性,这些属性应该只对目标数据库有效。

qcuzuvrc

qcuzuvrc1#

最糟糕的情况是安装了Firebird,因此一个连接连接到安装的服务器示例,而另一个连接到嵌入的服务器示例。对于这一点,有一个物理驱动程序对象就足够了,但有更多的驱动程序对象也没有问题。
因此,将一个TFDPhysFBDriverLink放在表单或数据表上,并将其DriverID属性设置为唯一名称(不用作任何驱动程序的基本驱动程序ID),并将其标记为Embedded(如果此时指定VendorLib,则没有实际意义,但可以使用它来识别驱动程序; FireDAC仅使用此属性来决定应加载哪个默认库)。
然后对于一个连接使用您定义的DriverID,对于另一个连接使用其BaseDriverID回退到默认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 }

相关问题