将 ConnectForm 字段从 ZeosLib 转换为 FireDAC
Converting ConnectForm fields from ZeosLib to FireDAC
Delphi 10.2.2
1. 将 MySQL 的 code part 从 ZeosLib 转换为 FireDAC 的方法是否正确?
ZeosLib:
procedure TMeConnectForm.edExit(Sender: TObject);
begin
try
MainForm.MyTrinityConnection.Password := edPassword.Text;
MainForm.MyTrinityConnection.HostName := edServer.Text;
MainForm.MyTrinityConnection.User := edUsername.Text;
MainForm.MyTrinityConnection.Database := edmDatabase.Text;
MainForm.MyTrinityConnection.Port := StrToIntDef(edPort.Text, 3306);
except
ActiveControl := Sender as TWinControl;
raise;
end;
end;
FireDAC:
procedure TMeConnectForm.edExit(Sender: TObject);
begin
try
MainForm.MyTrinityConnection.Open('Password := edPassword.Text');
MainForm.MyTrinityConnection.Open('Server:= edServer.Text');
MainForm.MyTrinityConnection.Open('User_Name:= edUsername.Text');
MainForm.MyTrinityConnection.Open('Database:= edmDatabase.Text');
MainForm.MyTrinityConnection.Open('Port:= StrToIntDef(edPort.Text, 3306)');
except
ActiveControl := Sender as TWinControl;
raise;
end;
end;
2.这里的某个地方也应该插入这个吗?
MainForm.MyTrinityConnection.DriverName:='MYSQL';
维多利亚解决方案后的最终代码,看起来是这样的:
procedure TMeConnectForm.edExit(Sender: TObject);
begin
try
MainForm.MyTrinityConnection.DriverName:='MySQL';
MainForm.MyTrinityConnection.Params.AddPair('Server', edServer.Text);
MainForm.MyTrinityConnection.Params.AddPair('Port', edPort.Text);
MainForm.MyTrinityConnection.Params.AddPair('Database', edmDatabase.Text);
MainForm.MyTrinityConnection.Params.AddPair('User_Name', edUsername.Text);
MainForm.MyTrinityConnection.Params.AddPair('Password', edPassword.Text);
except
ActiveControl := Sender as TWinControl;
raise;
end;
end;
1。我应该为我的连接指定 DriverName 吗?
是的,如果该连接对象尚未指定驱动程序,则必须这样做。
2。如何设置连接定义参数?
你的翻译有误。您只是重复调用 Open 方法,每次都传递一个连接定义参数(而且,您传递的值是 Delphi 语句的一部分)。这不是它应该的工作方式。
如果您想使用 Open 方法指定连接定义参数,您必须向那里传递一个完全限定的连接字符串。
嗯,要单独指定连接定义参数,您可以通过 Params collection (see Connection Definition Parameters 以名称值对的方式进行描述),例如:
FDConnection1.Params.Clear;
FDConnection1.Params.AddPair('Server', edServer.Text);
FDConnection1.Params.AddInt('Port', StrToIntDef(edPort.Text, 3306));
FDConnection1.Params.AddPair('Database', edmDatabase.Text);
FDConnection1.Params.AddPair('User_Name', edUsername.Text);
FDConnection1.Params.AddPair('Password', edPassword.Text);
可选地,您可以通过 Params collection, TFDPhysMySQLConnectionDefParams (this class you can remember from my 的特定 MySQL 实现来做同样的事情,例如:
uses
FireDAC.Phys.MySQLWrapper;
var
MySQLDef: TFDPhysMySQLConnectionDefParams;
begin
MySQLDef := TFDPhysMySQLConnectionDefParams(FDConnection1.Params);
MySQLDef.Server := edServer.Text;
MySQLDef.Port := StrToIntDef(edPort.Text, 3306);
MySQLDef.Database := edmDatabase.Text;
MySQLDef.UserName := edUsername.Text;
MySQLDef.Password := edPassword.Text;
end;
有关连接定义的一般阅读,请参阅 Defining Connection 主题。
Delphi 10.2.2
1. 将 MySQL 的 code part 从 ZeosLib 转换为 FireDAC 的方法是否正确?
ZeosLib:
procedure TMeConnectForm.edExit(Sender: TObject);
begin
try
MainForm.MyTrinityConnection.Password := edPassword.Text;
MainForm.MyTrinityConnection.HostName := edServer.Text;
MainForm.MyTrinityConnection.User := edUsername.Text;
MainForm.MyTrinityConnection.Database := edmDatabase.Text;
MainForm.MyTrinityConnection.Port := StrToIntDef(edPort.Text, 3306);
except
ActiveControl := Sender as TWinControl;
raise;
end;
end;
FireDAC:
procedure TMeConnectForm.edExit(Sender: TObject);
begin
try
MainForm.MyTrinityConnection.Open('Password := edPassword.Text');
MainForm.MyTrinityConnection.Open('Server:= edServer.Text');
MainForm.MyTrinityConnection.Open('User_Name:= edUsername.Text');
MainForm.MyTrinityConnection.Open('Database:= edmDatabase.Text');
MainForm.MyTrinityConnection.Open('Port:= StrToIntDef(edPort.Text, 3306)');
except
ActiveControl := Sender as TWinControl;
raise;
end;
end;
2.这里的某个地方也应该插入这个吗?
MainForm.MyTrinityConnection.DriverName:='MYSQL';
维多利亚解决方案后的最终代码,看起来是这样的:
procedure TMeConnectForm.edExit(Sender: TObject);
begin
try
MainForm.MyTrinityConnection.DriverName:='MySQL';
MainForm.MyTrinityConnection.Params.AddPair('Server', edServer.Text);
MainForm.MyTrinityConnection.Params.AddPair('Port', edPort.Text);
MainForm.MyTrinityConnection.Params.AddPair('Database', edmDatabase.Text);
MainForm.MyTrinityConnection.Params.AddPair('User_Name', edUsername.Text);
MainForm.MyTrinityConnection.Params.AddPair('Password', edPassword.Text);
except
ActiveControl := Sender as TWinControl;
raise;
end;
end;
1。我应该为我的连接指定 DriverName 吗?
是的,如果该连接对象尚未指定驱动程序,则必须这样做。
2。如何设置连接定义参数?
你的翻译有误。您只是重复调用 Open 方法,每次都传递一个连接定义参数(而且,您传递的值是 Delphi 语句的一部分)。这不是它应该的工作方式。
如果您想使用 Open 方法指定连接定义参数,您必须向那里传递一个完全限定的连接字符串。
嗯,要单独指定连接定义参数,您可以通过 Params collection (see Connection Definition Parameters 以名称值对的方式进行描述),例如:
FDConnection1.Params.Clear;
FDConnection1.Params.AddPair('Server', edServer.Text);
FDConnection1.Params.AddInt('Port', StrToIntDef(edPort.Text, 3306));
FDConnection1.Params.AddPair('Database', edmDatabase.Text);
FDConnection1.Params.AddPair('User_Name', edUsername.Text);
FDConnection1.Params.AddPair('Password', edPassword.Text);
可选地,您可以通过 Params collection, TFDPhysMySQLConnectionDefParams (this class you can remember from my
uses
FireDAC.Phys.MySQLWrapper;
var
MySQLDef: TFDPhysMySQLConnectionDefParams;
begin
MySQLDef := TFDPhysMySQLConnectionDefParams(FDConnection1.Params);
MySQLDef.Server := edServer.Text;
MySQLDef.Port := StrToIntDef(edPort.Text, 3306);
MySQLDef.Database := edmDatabase.Text;
MySQLDef.UserName := edUsername.Text;
MySQLDef.Password := edPassword.Text;
end;
有关连接定义的一般阅读,请参阅 Defining Connection 主题。