2017-10-11 168 views
2

我的應用程序有一個設計時間TFDConnectionTFDPhysFBDriverLink源連接。這可能會或可能不會以Firebird嵌入模式打開(如果是,則設置FDPhysFBDriverLink.VendorLib := 'fbembed.dll'(32位))。設置第二個TFDPhysFBDriverLink - 可能和必要嗎?

我創造出必須採用嵌入式火鳥,因爲我們如果安裝了PC(我們的設置用品fbembed.dll)上火鳥不知道運行時的目標TFDConnection

如何設置呢?在運行時,我可以創建另一個TFDPhysFBDriverLink並設置其VendorLib設置,但如何FireDAC知道其相關的連接是什麼?或者我可以在應用程序中只使用一個FDPhysFBDriverLink嗎?

這是我正在轉換的舊代碼,使用DirectSQL,並且這也用於設置一些神奇的SDFib.SqlApiDLL := FBEMBED屬性,該屬性應該僅用於目標數據庫。在您的情況

回答

1

最壞的情況是安裝火鳥,所以一個連接連接到安裝的服務器實例,而另一個嵌入的一個。因爲這足以擁有一個物理驅動對象,但沒有更多的問題。

所以,滴形式或數據模塊和設置其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。 –

相關問題