Delphi客户端服务器应用程序使用Firebird 2.5嵌入式连接出现错误。

5
我有一个很长的问题要问。首先,我在Delphi编程方面还非常新手,我的经验大多是使用ADO和Access数据库开发小型单用户数据库应用程序。
现在我需要转向客户端服务器应用程序,这就是问题开始的地方。我决定使用Firebird 2.5嵌入式作为我的数据库,因为它是开源的,并且可以与Delphi中的Interbase组件一起使用,而且多个客户端可以同时访问数据库。所以我按照Delphi中的Interbase教程进行操作。我成功地将客户端连接到服务器并查看了示例中的数据(当两者都在我的计算机上运行时),但是当我尝试将客户端移动到另一台计算机上时,保持服务器在我的计算机上并运行它以查看是否可以连接到服务器时,它给出了以下错误信息。
模块clientDemo.exe中的异常EIdSocketError。套接字错误#10061连接被拒绝。
我知道这可能是因为客户端中定义的主机名为localhost。但这里是我的第一个问题。在TSQLConnection中,您可以在Driver->Hostname下设置主机名。我想知道的是如何在运行时执行此操作,因为当我尝试创建编辑框允许用户输入值然后通过代码设置它时,我无法获取该属性,例如:
SQLConncetion1.Driver.Hostname:=edtHost.text; 无法通过这种方式执行此操作,我唯一看到的设置主机名的方法是使用对象检查器,但该检查器在运行时不可用,而且当程序第一次运行时,我需要在客户端上设置主机名,所以如何在运行时设置主机名/IP地址?
我正在使用Delphi XE2。
还有很多问题要解决,特别是涉及部署方面的问题,但我会逐步解决,并感谢您的建议。

不要重复造轮子。我们有一个名为mORMot的开源客户端-服务器ORM,采用JSON和SQLite3实现面向服务的架构。至少值得查看代码或阅读700页的文档,以获取一些设计或实现思路。 - Arnaud Bouchez
1个回答

3
嵌入式无法同时被多个用户使用(即使是在同一台机器上的两个应用程序)。请参阅此处以了解三个版本之间的差异。另外,此SO问题中也有相关信息。
关于在运行时指定服务器,可以尝试以下方法:
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;

1
对于嵌入式系统,不需要主机名,因为它一次只能被一个应用程序/连接访问。请访问我提供的第一个链接,了解三种FireBird服务器类型(Classic、Superserver和Embedded)之间的区别;其中有一张表格解释了它们之间的差异。 - Ken White
@Japster看这里http://www.connectionstrings.com/firebird 我没有使用过firebird,但我相信“Datasource=IP ADDRESS”需要作为参数添加。 - user497849
1
@Dorin,不适用于嵌入式。我发布的代码可以正常连接,并且根本没有IP地址。 - Ken White
我现在感觉很愚蠢,但我现在才意识到嵌入式版本仅适用于数据库驻留在运行应用程序的计算机上。因此,我必须使用超级服务器、经典服务器或超级经典服务器。但是部署有多难? - Japster
@KenWhite的代码"SQLConncetion1.Driver.Hostname := edtHost.text"让我想到他也需要远程访问。 - user497849
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接