Comment vérifier si un pilote OLEDB est installé sur le système ?

Comment puis-je m'assurer que qu'un certain pilote OLEDB est installé lorsque je démarre mon application ? J'utiliser ADO de Delphi et souhaitez afficher un message d'erreur descriptif si le pilote est manquant. L'erreur renvoyée par ADO n'est pas toujours facile à utiliser que.

Il y a probablement une fonction peu agréable qui renvoie tous les pilotes installés, mais je n'ai pas trouvé.

répondre #1

skamradt est correcte. Chaque fournisseur a un GUID associé à sa classe. Pour trouver le guid, ouvrez regedit et recherche dans le Registre pour le nom du fournisseur. Par exemple, recherchez « Microsoft Jet 4.0 OLE DB Provider ». Quand vous trouver, copiez la clé (valeur GUID) et l'utiliser dans une recherche de Registre dans votre application.

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;
répondre #2

Vous pouvez obtenir un nom de fournisseur ADO et vérifier dans le registre au chemin HKEY_CLASSES_ROOT\ [nom_de_fournisseur].

répondre #3

Ne serait pas le moyen le plus simple juste tente d'établir une connexion au démarrage et la capture de l'erreur ?

Je veux dire vous obtiendrez peut-être quelques erreurs différentes selon le, par exemple, l'utilisateur est en ligne, mais ils ont des cas que vous devriez être capable de tester.

répondre #4

Je crois que les objets OLEDB en question sont enterrés defaite dans le registre, depuis OLEDB / ADO est une solution de COM. J'imagine serait de voir si vous pouvez trouver le GUID que votre pilote est installé comme dans le registre.

répondre #5

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;
  }
 }
}

Tags lesen

   
 
logo_banner