从 Delphi 应用连接到另一台机器上的 InterbaseXE7 服务器
Connecting from a Delphi app to an InterbaseXE7 server on another machine
我在两台机器 A 和 B 上安装了 XE8 和它附带的 InterbaseXE7 版本。使用 IBX 或 DBX 我可以连接到同一台机器上的 IB 服务器 运行 并访问其数据库没有任何问题。顺便说一句,我不是普通的 IB 用户。
我从机器 A 上的 Delphi 应用程序连接到机器 B 上的 IB 数据库时一点运气都没有:我遇到了各种各样的错误,包括一个关于无法找到指定文件的神秘错误(尽管从 CMD 提示符下执行 DIR 以验证我的名称是否正确)直到我发现在那些情况下(连接到远程服务器),数据库名称必须在 A 上的 Delphi 应用程序中大写与数据库主机 B 上的完全一样。
因此,假设没有办法配置 IB and/or IBX 来避免这种区分大小写的情况,我如何以编程方式检索 B 上正确大写的数据库名称列表(假设我没有从 A 上的 Delphi 应用访问 B 的文件系统?
我尝试使用 TIBServerProperties 组件来执行此操作,但使用的代码如下:
procedure TForm1.btnPropertiesClick(Sender: TObject);
var
S : String;
begin
IBServerProperties1.Active := True;
IBServerProperties1.FetchDatabaseInfo;
S := IBServerProperties1.DatabaseInfo.DbName[0];
Caption := S;
end;
,从IB主机服务器返回的数据库名称都是大写的,这显然不能解决找到正确大写的问题。
事实证明,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 配置参数或类似参数可以避免引起我的问题的区分大小写,我仍然很想知道。
我在两台机器 A 和 B 上安装了 XE8 和它附带的 InterbaseXE7 版本。使用 IBX 或 DBX 我可以连接到同一台机器上的 IB 服务器 运行 并访问其数据库没有任何问题。顺便说一句,我不是普通的 IB 用户。
我从机器 A 上的 Delphi 应用程序连接到机器 B 上的 IB 数据库时一点运气都没有:我遇到了各种各样的错误,包括一个关于无法找到指定文件的神秘错误(尽管从 CMD 提示符下执行 DIR 以验证我的名称是否正确)直到我发现在那些情况下(连接到远程服务器),数据库名称必须在 A 上的 Delphi 应用程序中大写与数据库主机 B 上的完全一样。
因此,假设没有办法配置 IB and/or IBX 来避免这种区分大小写的情况,我如何以编程方式检索 B 上正确大写的数据库名称列表(假设我没有从 A 上的 Delphi 应用访问 B 的文件系统?
我尝试使用 TIBServerProperties 组件来执行此操作,但使用的代码如下:
procedure TForm1.btnPropertiesClick(Sender: TObject);
var
S : String;
begin
IBServerProperties1.Active := True;
IBServerProperties1.FetchDatabaseInfo;
S := IBServerProperties1.DatabaseInfo.DbName[0];
Caption := S;
end;
,从IB主机服务器返回的数据库名称都是大写的,这显然不能解决找到正确大写的问题。
事实证明,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 配置参数或类似参数可以避免引起我的问题的区分大小写,我仍然很想知道。