我有一个冗长的问题要问。首先,在Delphi编程方面,我仍然是一个新手,我的经验主要是使用ADO和Access数据库开发小型单用户数据库应用程序。
我现在需要转换到客户端服务器应用程序,这就是问题开始的地方。我决定使用Firebird 2.5作为我的数据库,因为它是开源的,它可以与Delphi中的interbase组件一起使用,并且多个客户端可以同时访问数据库。所以我遵循了Delphi中的interbase教程。我设法将客户端连接到服务器并查看示例中的数据(虽然两者都在我的电脑上运行),但是当我试图将客户端移动到另一台电脑上时,将服务器保持在我的状态并运行它以查看是否我可以连接到它给我的服务器以下错误。
0029DCAC模块clientDemo.exe中的异常EIdSocketError。套接字错误#10061连接被拒绝。
我理解这可能是因为主机在客户端中被定义为localhost。但这是我的第一个问题。在TSQLConncetion中,您可以在Driver-> Hostname下设置die hostname。我想知道的是你如何在运行时这样做,因为当我尝试创建一个编辑框以允许用户输入值然后通过代码设置它时,我无法获得属性,例如:
SQLConncetion1.Driver.Hostname:= edtHost.text; 这不能以这种方式完成,我看到你可以设置主机名的唯一方法是使用对象检查器,但是在运行时不可用,我需要在程序第一次运行时在客户端上设置主机名,所以如何在运行时设置主机名/ IP地址?
我正在使用Delphi XE2
特别是在部署方面还有很多问题,但我会逐一采取这一点,并且我很欣赏这些建议。
答案 0 :(得分:3)
嵌入式设备不能同时被多个用户使用(即使它是同一台计算机上的两个应用程序)。有关三个版本之间差异的信息,请参阅here。其他SO question中的信息也可能有所帮助。
就运行时指定服务器而言,这可能会有所帮助:
procedure TForm1.Button1Click(Sender: TObject);
var
Conn: TSQLConnection;
begin
Conn := TSQLConnection.Create(Self);
try
Conn.DriverName := 'FirebirdConnection';
Conn.Params.Add('User_Name=SYSDBA');
Conn.Params.Add('Password=masterkey');
// Replace the dbname in the next line with the
// value obtained at runtime, as in
// Conn.Params.Add('Database=' + YourNewPathAndDBName);
Conn.Params.Add('Database=C:\FireBirdData\YourDB.fdb');
Conn.Open;
if Conn.Connected then
ShowMessage('Connection successfully made to DB');
finally
Conn.Free;
end;
end;