需要在ODBC DSN连接的应用程序中标识数据库名称

Cha*_*IIC 5 sql delphi odbc dsn delphi-6

我有一个Delphi 6应用程序,它使用ODBC DSN连接到目标数据库.我想要包含列出DSN所连接的数据库名称的文本.我尝试使用SQL命令db_name(),但只有在我登录SQL服务器时才能使用它才响应nil.

Delphi中有一种方法可以识别我连接的数据库吗?我可以提取sys.databases表,但不确定如何识别哪个数据库是我连接的数据库

举个例子:

如果我连接到该DSN LocalDSN我希望能够以显示给它们连接到用户数据库,其中数据库是它们与通信的SQL数据库的名称.

Jer*_*dge 3

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

\n\n

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

\n\n
uses\n  Registry;\n\nfunction ServerOfDSN(const Name: String): String;\nvar\n  R: TRegistry;\n  K: String;\nbegin\n  K:= 'Software\\ODBC\\ODBC.INI\\'+Name;\n  R:= TRegistry.Create(KEY_READ);\n  try\n    R.RootKey:= HKEY_LOCAL_MACHINE;\n    if R.KeyExists(K) then begin\n      if R.OpenKey(K, False) then begin\n        if R.ValueExists('Server') then\n          Result:= R.ReadString('Server');\n        R.CloseKey;\n      end;\n    end;\n  finally\n    R.Free;\n  end;\nend;\n\nfunction DatabaseOfDSN(const Name: String): String;\nvar\n\xc2\xa0 R: TRegistry;\n\xc2\xa0 K: String;\nbegin\n  K:= 'Software\\ODBC\\ODBC.INI\\'+Name;\n  R:= TRegistry.Create(KEY_READ);\n  try\n    R.RootKey:= HKEY_LOCAL_MACHINE;\n    if R.KeyExists(K) then begin\n      if R.OpenKey(K, False) then begin\n        if R.ValueExists('Database') then\n          Result:= R.ReadString('Database');\n        R.CloseKey;\n      end;\n    end;\n  finally\n    R.Free;\n  end;\nend;\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n