如何获取 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
查看信息
- c:\Program Files (x86)\Firebird\Firebird_2_1\doc\README.monitoring_tables.txt
- http://firebirdsql.su/doku.php?id=mon_database 通过 www.translate.ru
- https://dba.stackexchange.com/questions/29919/firebird-monitoring-tables
- http://www.upscene.com/documentation/fbtm2/index.html?dm_monitoringtables.htm
- http://www.firebirdsql.org/file/community/conference-2014/pcisar/#1
当 SQLConnection.Params
属性 为空时 Params.Values['Database']
return 为空字符串,即使 BeforeConnect
或 AfterConnect
事件已触发。
您可以使用 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.
我正在测试一个很旧的 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
查看信息
- c:\Program Files (x86)\Firebird\Firebird_2_1\doc\README.monitoring_tables.txt
- http://firebirdsql.su/doku.php?id=mon_database 通过 www.translate.ru
- https://dba.stackexchange.com/questions/29919/firebird-monitoring-tables
- http://www.upscene.com/documentation/fbtm2/index.html?dm_monitoringtables.htm
- http://www.firebirdsql.org/file/community/conference-2014/pcisar/#1
当 SQLConnection.Params
属性 为空时 Params.Values['Database']
return 为空字符串,即使 BeforeConnect
或 AfterConnect
事件已触发。
您可以使用 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.