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

时间:2015-06-13 17:49:21

标签: mysql delphi firedac

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

3 个答案:

答案 0 :(得分:8)

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

Working with Connections (FireDAC)

Connect to MySQL Server (FireDAC)

您可以将数据库服务器指定为连接定义

的一部分

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;

答案 1 :(得分:1)

最新答案,但是很简单。

重新评估TLama的评论:

param属性可能因驱动程序类型而异,因此请将驱动程序类型设置为MySQL,然后将PARAMS强制转换为驱动程序类型。 只要做:

(Conn1.Params as TFDPhysMySQLConnectionDefParams).Server := '127.0.0.1';

通过这种方式,编译器可以在编译时验证参数。

答案 2 :(得分: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;