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';
Victorias解决方案之后的最终代码如下:
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;
答案 0 :(得分:1)
是的,如果该连接对象尚未指定驱动程序,则必须这样做。
您的翻译是错误的。您只是在重复调用Open方法,每次都使用单个连接定义参数(更重要的是,要传递的值是Delphi语句的一部分)。那不是应该的方式。
如果您想使用Open方法来指定连接定义参数,则必须在其中传递一个完全合格的连接字符串。
好吧,要分别指定连接定义参数,您可以通过Params集合中的名称/值对方式进行描述(有关说明,请参见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集合的特定MySQL实现 TFDPhysMySQLConnectionDefParams (您可以从我的last answer记住的此类)中进行相同的操作,例如:>
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主题。