使用TFDConnection以编程方式设置"服务器"

use*_*539 5 mysql delphi firedac

TFDConnection.Params.Server不是Delphi XE7中的有效发布属性.如何以编程方式设置服务器位置?我有两个不同ip的MySQL服务器(测试和生产),根据我在应用程序中的操作,我想在2台服务器之间轻松切换.

Rem*_*eau 8

请阅读文档,它告诉您如何为MySQL定义FireDAC连接:

使用Connections(FireDAC)

连接到MySQL服务器(FireDAC)

您可以将DB服务器指定为连接定义的一部分:

定义连接(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
...
Run Code Online (Sandbox Code Playgroud)

或动态使用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;
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

无论哪种方式,您都可以TFDConnection在需要时告诉使用哪个连接定义来访问每个数据库:

FDConnection1.ConnectionDefName := 'MySQL_Connection_1';
// or: FDConnection1.ConnectionDefName := 'MySQL_Connection_2';
FDConnection1.Connected := True;
Run Code Online (Sandbox Code Playgroud)

或者,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;
Run Code Online (Sandbox Code Playgroud)