17

アプリケーションの起動時に特定の OLEDB ドライバーがインストールされていることを確認するにはどうすればよいですか? Delphi の ADO を使用しており、ドライバが見つからない場合に説明的なエラー メッセージを表示したいと考えています。ADO から返されるエラーは、常にユーザー フレンドリーであるとは限りません。

インストールされているすべてのドライバーを返す素敵な小さな関数があるかもしれませんが、私はそれを見つけていません。

4

6 に答える 6

11

これは古い質問ですが、私は今同じ問題を抱えていました。おそらくこれは他の人を助けることができます.

Delphi 7 では、プロバイダ名を含む TStringList を返す ADODB のプロシージャがあります。

使用例:

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;';
于 2012-09-28T14:49:58.373 に答える
3

各プロバイダーには、そのクラスに関連付けられた GUID があります。GUID を見つけるには、regedit を開き、プロバイダー名のレジストリを検索します。たとえば、「Microsoft Jet 4.0 OLE 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;
于 2008-09-30T19:26:24.137 に答える
3

ADO プロバイダー名を取得し、レジストリのパス HKEY_CLASSES_ROOT\[Provider_Name] で確認できます。

于 2008-10-03T05:27:01.897 に答える
1

最も簡単な方法は、起動時に接続を試みてエラーをキャッチすることではないでしょうか?

たとえば、ユーザーがオンラインであるかどうかに応じて、いくつかの異なるエラーが返される可能性がありますが、それらはテストできるはずです。

于 2008-09-22T09:58:33.063 に答える
0
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;
  }
 }
}
于 2010-07-29T14:02:20.997 に答える
0

OLEDB / ADOはCOMソリューションであるため、問題のOLEDBオブジェクトはレジストリのどこかに埋め込まれていると思います。私の推測では、ドライバーがレジストリにインストールされている GUID を見つけることができるかどうかを確認することです。

于 2008-09-22T14:04:47.823 に答える