2011-11-03 5 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 연결을 읽을 수 있어야하지만, 여기에 내가 아무것도 얻을 수 없다. Wow6432Node 숨겨진 키를 사용하는 32 비트와 64 비트 시스템 사이에 약간의 차이점이 있다고 들었습니다. 그러나 나는 아직도 아무것도 얻지 않는다.

컴파일 된 버전을 32 비트와 64 비트로 분리해야하기 때문에 걱정됩니다.

시스템 및 사용자 ODBC 연결을 얻는 다른 방법이 있습니까?

+3

이 주제는 좋은 것일뿐만 아니라 좋겠지 만 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 비트 코드 용으로 만 정의 된 ODBC 데이터 소스를 사용할 수 있습니다. SQLDataSources는 코드에서 사용할 수있는 데이터 소스 만 반환해야합니다.

+0

다 소프트의 의견은 나에게 뭔가를 제공하지만 델파이 XE, 유니 코드 문제와 함께 작동하지 않는 것처럼 보입니다. 또한 여기에 두 개의 로컬 및 시스템 ODBC를 분리 할 가능성이 있습니까? – Plastkort

+0

SQLDataSources에서 문서를 읽으면 SQL_FETCH_FIRST_USER 및 SQL_FETCH_FIRST_SYSTEM 인수가 있습니다. – bohica

관련 문제