는 방법을 확인하는 문자열 드라이버에 설치되는 시스템입니까?

StackOverflow https://stackoverflow.com/questions/113860

  •  02-07-2019
  •  | 
  •  

문제

고 있는지 어떻게 확인할 수 있는 특정 문자열 드라이버가 설치되어 있는지를 시작할 때 나는 내 응용 프로그램?내가 사용하는 ADO 델파이에서와 같은 것을 표시하는 설명이 포함된 경우에는 오류 메시지 드라이버가 없습니다.는 오류의 반환에서 ADO 지 않는 사용자 친화적이다.

아마도 작은 기능을 반환하는 모든 드라이버를 설치했습니다.

도움이 되었습니까?

해결책

각 공급자는 GUID 과 관련 클래스입니다.Guid 를 찾으려면 오픈 regedit 검색 레지스트리에 대한 공급자의 이름입니다.예를 들어,"에 대한 검색 Microsoft Jet4.0OLE DB 공급자".당신이 그것을 찾을 때,복사 열쇠(GUID 값)와 사용되는 레지스트리에서 검색 응용 프로그램입니다.

function OleDBExists : boolean;
var
  reg : TRegistry;
begin
  Result := false;

  // See if Advantage OLE DB Provider is on this PC
  reg := TRegistry.Create;
  try
    reg.RootKey := HKEY_LOCAL_MACHINE;
    Result := reg.OpenKeyReadOnly( '\SOFTWARE\Classes\CLSID\{C1637B2F-CA37-11D2-AE5C-00609791DC73}' );
  finally
    reg.Free;
  end;
end;

다른 팁

이것은 오래된 질문이지만 나는 같은 문제를 가지고 있었습니다 지금 어쩌면 이것은 다른 사람을 도울 수 있다.

델파이 7 가 절차에 ADODB 반환하는 TStringList 공급자 이름이 있습니다.

사용 예제:

names := TStringList.Create;
ADODB.GetProviderNames(names);

if names.IndexOf('SQLNCLI10')<>-1 then
  st := 'Provider=SQLNCLI10;'
else if names.IndexOf('SQLNCLI')<>-1 then
  st := 'Provider=SQLNCLI;'
else if names.IndexOf('SQLOLEDB')<>-1 then
  st := 'Provider=SQLOLEDB;';

을 얻을 수 있습 ADO 공급자 이름에서 확인트 레지스트리에서 경로 HKEY_CLASSES_ROOT\[Provider_Name].

지 않는 가장 쉬운 방법은 그냥을 만들려고 노력하에서 연결을 시작 잡는 오류?

난 당신을 얻을 수 있습니다 몇 가지 다른 오류에 따라,예를 들어,사용자가 온라인으로,그러나 그들은 경우에 당신을 테스트 할 수 있어야한다.

나는 문자열에서 객체 질문이 묻혀있는 곳으로 레지스트리에서부터 문자열/ADO COM 솔루션입니다.내 생각하는 것 당신을 찾을 수 있습니다 GUID 는 드라이버가 설치되어 있으로 레지스트리에서.

namespace Common {
  public class CLSIDHelper {

  [DllImport("ole32.dll")]
  static extern int CLSIDFromProgID([MarshalAs(UnmanagedType.LPWStr)] string lpszProgID, out Guid pclsid);


  public static Guid RetrieveGUID(string Provider) {
    Guid CLSID = Guid.Empty;
    int Ok = CLSIDFromProgID(Provider, out CLSID);
    if (Ok == 0)
       return CLSID;
    return null;
  }
 }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top