如何获取 DBExpress TSqlConnection 实际连接到的数据库的名称?

How can I get the name of the database a DBExpress TSqlConnection is actually connected to?

我正在测试一个很旧的 Delphi6 应用程序,我想显示 TSqlConnection 实际连接到的数据库名称,这样我可以快速查看我连接的是测试数据库还是生产数据库.

在 sqlconnections.ini 中,应用程序有一个名为 'Vienna' 的连接,连接到定义如下的 Firebird 数据库: Database=192.168.1.15:ProductionDB(别名) 为了测试目的,我已经将其替换为 数据库=192.168.1.15:TestDB.

但我看到仅访问 TSqlConnection 的参数列表并且 'Database' 的值不起作用。此值始终设置为与设计模式中的值相同。

如何找出 TSqlConnection 实际连接到哪个数据库(在我的例子中是哪个 Firebird 别名)?

FB 2 中引入了监控表。1.x :-)

所以试试

 select MON$DATABASE_NAME from MON$DATABASE

或尝试

 select MON$ATTACHMENT_NAME from MON$ATTACHMENTS
    where MON$ATTACHMENT_ID = CURRENT_CONNECTION

查看信息

SQLConnection.Params 属性 为空时 Params.Values['Database'] return 为空字符串,即使 BeforeConnectAfterConnect 事件已触发。

您可以使用 TSQLConnection.OnLogin 事件。 例如:

procedure TForm11.SQLConnection1Login(Database: TSQLConnection;
  LoginParams: TWideStrings);
var
 i : integer;
begin
  //Show all params
  for I := 0 to LoginParams.Count - 1 do
    ShowMessage(LoginParams[i]);

  // Show database
  ShowMessage(LoginParams.Values['Database']);   
end;

Use the OnLogin event to assign values to the User_Name, Password, and Database parameters immediately before TSQLConnection attempts to connect to the database server. OnLogin only occurs if the LoginPrompt property is true. If LoginPrompt is true but there is no OnLogin event handler, a default login dialog appears in which the user can enter a user name and password. The connection fails if correct values for the user name and password are not supplied in the dialog or by the OnLogin event handler.

Source