【问题标题】:How can I get the name of the database a DBExpress TSqlConnection is actually connected to?如何获取 DBExpress TSqlConnection 实际连接到的数据库的名称?
【发布时间】:2016-02-29 13:42:18
【问题描述】:

我正在测试一个相当老的 Delphi 6 应用程序,并希望显示 TSqlConnection 实际连接到的数据库名称,这样我可以快速查看我是连接到测试数据库还是生产数据库。

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

但我已经看到仅访问 TSqlConnection 的 Params-List 并且那里的“数据库”的值不起作用。此值始终设置为与设计模式下相同。

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

【问题讨论】:

  • 哪个 Firebird 版本?

标签: delphi firebird dbexpress delphi-6


【解决方案1】:

监控表被引入 FB 2.1.x :-)

那就试试吧

 select MON$DATABASE_NAME from MON$DATABASE

或者试试

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

查看信息

【讨论】:

    【解决方案2】:

    SQLConnection.Params 属性为空时Params.Values['Database'] 即使在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;
    

    使用 OnLogin 事件为 User_Name、Password 和 紧接在 TSQLConnection 尝试之前的数据库参数 连接到数据库服务器。 OnLogin 仅在 LoginPrompt 时发生 属性为真。如果 LoginPrompt 为 true 但没有 OnLogin 事件 处理程序,会出现一个默认登录对话框,用户可以在其中输入 用户名和密码。如果值正确,则连接失败 用户名和密码未在对话框中或由 OnLogin 事件处理程序。

    Source

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      • 1970-01-01
      • 2014-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-28
      相关资源
      最近更新 更多