如何检查是否安装了系统上的OLEDB驱动程序?(How to check if an OLEDB d

2019-06-26 03:19发布

我怎样才能确保一定的OLEDB驱动程序安装,当我开始我的应用程序? 我使用ADO从Delphi和想显示一个描述性的错误消息,如果驱动程序丢失。 这是一个从ADO返回的错误并不总是那么友好。

有可能是返回所有安装的驱动程序一个不错的功能,但我还没有找到它。

Answer 1:

每个供应商都有与它的类相关联的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;


Answer 2:

这是一个老问题,但现在我有同样的问题,也许这可以帮助别人。

在Delphi 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;';


Answer 3:

你可以得到一个ADO提供程序名称,并检查它在路径注册表HKEY_CLASSES_ROOT \ [PROVIDER_NAME。



Answer 4:

那不是最简单的方法只是试图使在启动连接和捕捉错误?

我的意思是,你可能会得到一些不同的错误回视,例如,用户在线,但他们说,你应该能够测试案例。



Answer 5:

我认为有问题的OLEDB对象都埋在注册表的某个地方,因为OLEDB / ADO是一个COM解决方案。 我的猜测是,看看是否能找到你的驱动程序安装在注册表中的GUID。



Answer 6:

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


文章来源: How to check if an OLEDB driver is installed on the system?
标签: delphi oledb ado