【问题标题】:Connecting from a Delphi app to an InterbaseXE7 server on another machine从 Delphi 应用程序连接到另一台机器上的 InterbaseXE7 服务器
【发布时间】:2015-09-11 16:38:57
【问题描述】:

我在两台机器 A 和 B 上安装了 XE8 和随附的 InterbaseXE7 版本。使用 IBX 或 DBX,我可以连接到同一台机器上运行的 IB 服务器并毫无问题地访问其数据库。顺便说一句,我不是普通的 IB 用户。

我没有运气从机器 A 上的 Delphi 应用程序连接到机器 B 上的 IB 数据库:我遇到了各种各样的错误,包括一个关于无法找到指定文件的神秘错误(尽管从一个 CMD 提示,以验证我的名称是否正确),直到我发现在这种情况下(连接到远程服务器),数据库名称必须在 A 上的 Delphi 应用程序中大写,就像它在数据库主机 B 上一样。

因此,假设无法配置 IB 和/或 IBX 来避免这种区分大小写,我如何以编程方式检索 B 上正确大写的数据库名称列表(假设我无权访问 B 的文件-system) 来自 A 上的 Delphi 应用程序?

我尝试使用 TIBServerProperties 组件来执行此操作,但使用如下代码:

procedure TForm1.btnPropertiesClick(Sender: TObject);
var
  S : String;
begin
  IBServerProperties1.Active := True;
  IBServerProperties1.FetchDatabaseInfo;
  S := IBServerProperties1.DatabaseInfo.DbName[0];
  Caption := S;
end;

,从IB主机服务器返回的数据库名称全部大写,显然没有解决找到正确大写的问题。

【问题讨论】:

    标签: delphi delphi-xe8 interbase


    【解决方案1】:

    事实证明,TIBServerProperties 可以从具有正确大小写的远程服务器获取数据库别名,但不使用 DatabaseInfo 属性。可以从其 AliasInfo 属性中获取信息(事后看来,这是一种显而易见的事情),如下所示。

    procedure TForm1.btnPropertiesClick(Sender: TObject);
    var
      S : String;
      i : Integer;
    begin
      IBServerProperties1.Active := True;
      IBServerProperties1.FetchAliasInfo;
      for i :=0 to IBServerProperties1.AliasCount - 1 do begin
        S := IBServerProperties1.AliasInfo[i].Alias;  // <- the .Alias has the
         // same capitalization as on the server
        S := S + ' ' + IBServerProperties1.AliasInfo[i].DBPath;
        Memo2.Lines.Add(S);
      end;
    end;
    

    ,这对于我的直接目的来说已经足够了。

    不过,我仍然有兴趣知道是否有 IB 配置参数或类似参数可以避免引起我 q 的区分大小写。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 2016-09-02
      • 1970-01-01
      • 2019-08-19
      • 2016-11-13
      • 2022-11-15
      • 1970-01-01
      相关资源
      最近更新 更多