gpt4 book ai didi

sql - 需要识别 ODBC DSN 连接的应用程序中的数据库名称

转载 作者:行者123 更新时间:2023-12-03 15:12:12 26 4
gpt4 key购买 nike

我有一个 Delphi 6 应用程序,它使用 ODBC DSN 连接到目标数据库。我想包含列出 DSN 连接到的数据库名称的文本。我尝试使用 SQL 命令 db_name() 但只收到 nil 响应,尽管当我登录 SQL Server 时它可以工作。

Delphi 中有没有办法识别我连接到哪个数据库?我可以提取 sys.databases 表,但不确定如何识别我连接到的数据库

举个例子:

如果我连接到 dsn LocalDSN 我希望能够向用户显示他们已连接到数据库,其中数据库是 sql 的名称他们正在与之通信的数据库。

最佳答案

ODBC DSN 存储在 Windows 注册表中。请记住,Windows 注册表以及 ODBC DSN 设置在 32 位版本和 64 位版本之间是分开的。您可以通过HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\[YOUR_DSN_NAME]访问此信息,然后读取值DatabaseServer来了解数据库或服务器名称。

您可以使用以下函数读取服务器和数据库名称:

uses
Registry;

function ServerOfDSN(const Name: String): String;
var
R: TRegistry;
K: String;
begin
K:= 'Software\ODBC\ODBC.INI\'+Name;
R:= TRegistry.Create(KEY_READ);
try
R.RootKey:= HKEY_LOCAL_MACHINE;
if R.KeyExists(K) then begin
if R.OpenKey(K, False) then begin
if R.ValueExists('Server') then
Result:= R.ReadString('Server');
R.CloseKey;
end;
end;
finally
R.Free;
end;
end;

function DatabaseOfDSN(const Name: String): String;
var
  R: TRegistry;
  K: String;
begin
K:= 'Software\ODBC\ODBC.INI\'+Name;
R:= TRegistry.Create(KEY_READ);
try
R.RootKey:= HKEY_LOCAL_MACHINE;
if R.KeyExists(K) then begin
if R.OpenKey(K, False) then begin
if R.ValueExists('Database') then
Result:= R.ReadString('Database');
R.CloseKey;
end;
end;
finally
R.Free;
end;
end;

根据您使用的数据库引擎和驱动程序,此注册表项的内容可能会有所不同,因此 ServerDatabase 可能不会是您需要的注册表值,但请自行检查并在注册表中找到您的值名称以了解如何读取它。

关于sql - 需要识别 ODBC DSN 连接的应用程序中的数据库名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15148038/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com