2015-06-13 109 views
4

TFDConnection.Params.Server不是Delphi XE7中的有效發佈屬性。如何以編程方式設置服務器位置?我有兩臺MySQL服務器(測試和生產),它們位於不同的IP上,並且基於我在應用程序中做的事情,我想在兩臺服務器之間來回切換。使用TFDConnection以編程方式設置「服務器」

+0

那麼,什麼問題?關閉連接(或禁用「Active」屬性),更改「Params」字符串列表中的「Server」值並連接。 – TLama

+0

這就是我所說的...... TFDConnection.Params.Server顯示錯誤:'TFDConnectionDefParams'不包含名爲'server'的成員。當然,我實際上使用的是對象的「名稱」,但不是「TFDConnection」。 – user2021539

+2

您可以將其作爲字符串列表進行訪問,例如'FDConnection.Params [FDConnection.Params.IndexOfName('Server')]:='...';'。或者你可以嘗試(手工沒有FireDAC),'(FDConnection.Params as TFDPhysMySQLConnectionDefParams).Server:='...''在添加FireDAC.Phys.MySQL單元后(後者會更安全)。 – TLama

回答

5

請閱讀文檔,它會告訴你到底如何定義MySQL的一個FireDAC連接:

Working with Connections (FireDAC)

​​

你會指定DB服務器作爲連接定義的一部分:

Defining Connection (FireDAC)

連接定義可以在外部.ini文件中定義,您可以在TFDManager.ConnectionDefFileName屬性中引用該文件,也可以使用TFDManager.LoadConnectionDefFile()方法動態加載。

[MySQL_Connection_1] 
DriverID=MySQL 
Server=192.168.1.100 
... 

[MySQL_Connection_2] 
DriverID=MySQL 
Server=192.168.1.101 
... 

或動態使用TFDManager.ConnectionDefs屬性:

var 
    oDef: IFDStanConnectionDef; 
begin 
    oDef := FDManager.ConnectionDefs.AddConnectionDef; 
    oDef.Name := 'MySQL_Connection_1'; 
    oDef.DriverID := 'MySQL'; 
    oDef.Server := '192.168.1.100'; 
    ... 
    oDef.Apply; 

    oDef := FDManager.ConnectionDefs.AddConnectionDef; 
    oDef.Name := 'MySQL_Connection_2'; 
    oDef.DriverID := 'MySQL'; 
    oDef.Server := '192.168.1.101'; 
    ... 
    oDef.Apply; 

var 
    oParams: TStrings; 
begin 
    oParams := TStringList.Create; 
    oParams.Add('Server=192.168.1.100'); 
    ... 
    FDManager.AddConnectionDef('MySQL_Connection_1', 'MySQL', oParams); 

    oParams.Clear; 
    oParams.Add('Server=192.168.1.101'); 
    ... 
    FDManager.AddConnectionDef('MySQL_Connection_2', 'MySQL', oParams); 

無論哪種方式,你可以再告訴TFDConnection需要時使用的連接定義,以達到每個數據庫:

FDConnection1.ConnectionDefName := 'MySQL_Connection_1'; 
// or: FDConnection1.ConnectionDefName := 'MySQL_Connection_2'; 
FDConnection1.Connected := True; 

或者,您可以在TFDConnection.Params屬性直接指定,如果你不想預先定義單獨的連接定義的連接參數:

FDConnection1.DriverName := 'MySQL'; 
FDConnection1.Params.Clear; 
FDConnection1.Params.Add('Server=192.168.1.100'); 
// or: FDConnection1.Params.Values['Server'] := '192.168.1.100'; 
... 
FDConnection1.Connected := True; 
0

這對我的作品。根據需要添加任何附加參數

var 
oParams: TStrings; 
begin 
oParams := TStringList.Create; 
oParams.Add('Server=' + YourServer); 
oParams.Add('Database=' + YourDatabase); 
oParams.Add('OSAuthent=Yes'); 

FDManager.AddConnectionDef('CNX1', 'MSSQL', oParams); 
FDConnection.ConnectionDefName := 'CNX1'; 
FDConnection.Connected := true; 
if FDConnection.Connected then 
ShowMessage('Connected'); 
oParams.Free;