如何获取系统上的所有ODBC连接?

时间:2011-11-03 07:42:28

标签: delphi odbc registry ado delphi-xe

  

可能重复:
  Get the list of ODBC data source names programatically using Delphi

我正在寻找一种获取本地系统ODBC连接的方法。我目前使用的方法是在以下函数中从HKCU读取注册表值,该函数有效!

function GetSystemDSN : TStringlist;
var
  ini  : TRegistry;
  strings : TStringlist;
begin
  ini := TRegistry.Create(KEY_READ);
  strings := TStringlist.create;
  with ini do
  try
    RootKey := HKEY_CURRENT_USER;
    if KeyExists('SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources') then
    begin
      OpenKeyReadOnly('SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources');
      GetValueNames(strings);
    end;
    result := strings;
  finally
    ini.Free;
  end;
end;

但是我应该可以更改为HKEY_LOCAL_MACHINE并读取全局系统的ODBC连接,但是在这里我什么也得不到。我听说使用Wow6432Node隐藏密钥的32位和64位系统之间存在一些差异。但我仍然一无所获。

我也很担心这个,因为我需要分开32位和64位编译版本?

是否有其他方法可以获得系统和用户ODBC连接?

1 个答案:

答案 0 :(得分:1)

为什么不直接使用ODBC API SQLDataSources? 32位代码只能使用为32位程序定义的ODBC数据源,类似于64位代码。 SQLDataSources应该只返回代码可以使用的数据源。