设置第二个 TFDPhysFBDriverLink - 可能且必要吗?
Setting up a second TFDPhysFBDriverLink - possible and necessary?
我的应用程序有一个设计时间 TFDConnection
和 TFDPhysFBDriverLink
作为源连接。这可能会或可能不会在 Firebird 嵌入式模式下打开(如果是,FDPhysFBDriverLink.VendorLib := 'fbembed.dll'
已设置(32 位))。
我创建了一个 运行-time 目标 TFDConnection
必须 使用嵌入式 Firebird 因为我们不知道 PC 上是否安装了 Firebird(我们的安装耗材 fbembed.dll
).
我该如何设置?在 运行 时我可以创建另一个 TFDPhysFBDriverLink
并设置它的 VendorLib,但是 FireDAC 如何知道它的关联连接是什么?或者我可以在应用程序中只使用一个 FDPhysFBDriverLink
吗?
这是我正在转换的旧代码,使用 DirectSQL,这也用于设置一些魔术 SDFib.SqlApiDLL := FBEMBED
属性,据称仅适用于目标数据库。
在您的情况下,最坏的情况是安装了 Firebird,因此一个连接连接到已安装的服务器实例,而另一个连接到嵌入式服务器实例。因为拥有一个物理驱动程序对象就足够了,但是拥有更多也没有问题。
所以,这个时候丢一个TFDPhysFBDriverLink on a form or datamodule and setup its DriverID property to a unique name (that is not used as base driver ID for any driver), and mark it as Embedded (that has no practical meaning in case when you specify VendorLib,不过你可以用它来识别驱动程序; FireDAC 使用此 属性 仅用于决定应加载哪个默认库。
然后对于一个连接使用 DriverID that you defined and for the other one use fallback to default Firebird driver settings by using its 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 }
我的应用程序有一个设计时间 TFDConnection
和 TFDPhysFBDriverLink
作为源连接。这可能会或可能不会在 Firebird 嵌入式模式下打开(如果是,FDPhysFBDriverLink.VendorLib := 'fbembed.dll'
已设置(32 位))。
我创建了一个 运行-time 目标 TFDConnection
必须 使用嵌入式 Firebird 因为我们不知道 PC 上是否安装了 Firebird(我们的安装耗材 fbembed.dll
).
我该如何设置?在 运行 时我可以创建另一个 TFDPhysFBDriverLink
并设置它的 VendorLib,但是 FireDAC 如何知道它的关联连接是什么?或者我可以在应用程序中只使用一个 FDPhysFBDriverLink
吗?
这是我正在转换的旧代码,使用 DirectSQL,这也用于设置一些魔术 SDFib.SqlApiDLL := FBEMBED
属性,据称仅适用于目标数据库。
在您的情况下,最坏的情况是安装了 Firebird,因此一个连接连接到已安装的服务器实例,而另一个连接到嵌入式服务器实例。因为拥有一个物理驱动程序对象就足够了,但是拥有更多也没有问题。
所以,这个时候丢一个TFDPhysFBDriverLink on a form or datamodule and setup its DriverID property to a unique name (that is not used as base driver ID for any driver), and mark it as Embedded (that has no practical meaning in case when you specify VendorLib,不过你可以用它来识别驱动程序; FireDAC 使用此 属性 仅用于决定应加载哪个默认库。
然后对于一个连接使用 DriverID that you defined and for the other one use fallback to default Firebird driver settings by using its 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 }