는 방법을 확인하는 문자열 드라이버에 설치되는 시스템입니까?
문제
고 있는지 어떻게 확인할 수 있는 특정 문자열 드라이버가 설치되어 있는지를 시작할 때 나는 내 응용 프로그램?내가 사용하는 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;
}
}
}