如何检查系统上是否安装了OLEDB驱动程序?

时间:2008-09-22 08:50:09

标签: delphi oledb ado

启动应用程序时,如何确保安装某个OLEDB驱动程序?我使用Delphi的ADO,如果缺少驱动程序,则希望显示描述性错误消息。从ADO返回的错误并不总是那么用户友好。

可能有一个很好的小函数可以返回所有已安装的驱动程序,但我还没有找到它。

6 个答案:

答案 0 :(得分:9)

这是一个老问题,但我现在遇到了同样的问题,也许这可以帮助其他人。

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

答案 1 :(得分:3)

每个提供程序都有一个与其类关联的GUID。要查找guid,请打开注册表并在注册表中搜索提供程序名称。例如,搜索“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;

答案 2 :(得分:2)

您可以获取ADO提供程序名称,并在路径HKEY_CLASSES_ROOT \ [Provider_Name]的注册表中进行检查。

答案 3 :(得分:1)

最简单的方法不是试图在启动时建立连接并捕获错误吗?

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

答案 4 :(得分:0)

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

答案 5 :(得分: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;
  }
 }
}