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数据库的名称.
ODBC DSN 存储在 Windows 注册表中。请记住,Windows 注册表以及 ODBC DSN 设置在 32 位版本和 64 位版本之间是分开的。您可以通过访问此信息HKEY_LOCAL_MACHINE\\Software\\ODBC\\ODBC.INI\\[YOUR_DSN_NAME],然后读取值Database或Server了解数据库或服务器名称。
您可以使用以下函数读取服务器和数据库名称:
\n\nuses\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;\nRun Code Online (Sandbox Code Playgroud)\n\n根据您使用的数据库引擎和驱动程序,此注册表项的内容可能会有所不同,因此有可能是Server或Database不是您需要的注册表值,但请自行检查并在注册表中找到您的值名称知道如何阅读它。