2011-11-03 32 views
0

可能重複:
Get the list of ODBC data source names programatically using Delphi如何獲得系統上的所有ODBC連接?

我正在尋找一種方式來獲得本地系統的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連接,但在這裏,我什麼也沒得到。我聽說32和64位系統之間有一些區別,你使用的是隱藏密鑰Wow6432Node。但我什麼也沒得到。

我也關注這個,因爲我需要分離32位和64位編譯版本?

是否有任何其他方式獲取系統和用戶的ODBC連接?

+3

本主題dublicates http://stackoverflow.com/questions/7675412/get-the-list-of-odbc-data-source-names-programatically-using-delphi/7676569#7676569 –

回答

1

爲什麼不直接使用ODBC API SQLDataSources?您的32位代碼只能使用爲32位程序定義的ODBC數據源,並且類似地使用64位代碼。 SQLDataSources應只返回您的代碼可以使用的數據源。

+0

這將是很好,也來自da-soft的評論給了我一些東西,但它似乎不適用於delphi XE,unicode問題,雖然有可能將這兩個本地和系統odbc分開嗎? – Plastkort

+0

只需閱讀SQLDataSources上的文檔,就可以得到一個SQL_FETCH_FIRST_USER和SQL_FETCH_FIRST_SYSTEM參數。 – bohica