如何以编程方式检测是否安装了MySql Connector / ODBC? (并在需要时安装)

时间:2011-07-22 02:54:04

标签: delphi

我在想这里的客户端PC。当有人来运行我的应用程序时,他们可能没有安装MySql Connector / ODBC。

现在,我可以只是尝试连接信息方案(或mysql)数据库(这是更好的?) - 但是,如果失败,它可能只意味着数据库服务器已关闭。我可以 ping它,但它可能已经启动,MySql进程当前没有运行。

我想我无论如何都可以安装连接器,即使它听起来很草率,但如果这样做会显着减慢我应用程序的启动时间,那就不行了。

最好的方法是什么?

当我安装时,我如何从Delphi中做到这一点,因为d / b服务器上的连接器是可用的,谁知道IP地址?

或者......目前我的应用程序是一个简单的.EXE,没有安装程序。我应该创建一个也安装ODBC连接器的安装吗? (如果是这样,任何人都可以推荐一个好的免费软件安装构建器(没有广告软件或工具栏安装)?

我希望这很清楚。如果没有,请问我。

感谢。

2 个答案:

答案 0 :(得分:7)

要检查已安装的ODB驱动程序,您必须检查此Windows注册表项

HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers

从那里你可以轻松编写一个delphi函数来检测是否安装了MySQL ODBC驱动程序

{$APPTYPE CONSOLE}

uses
  Windows,
  Classes,
  Registry,
  SysUtils;

function ODBC_DriverInstalled(const DriverName:string) : Boolean;
Var
  Reg      : TRegistry;
  Providers: TStrings;
  i        : Integer;
begin
  Reg:=TRegistry.Create;
  Result:=False;
  try
     Reg.RootKey:=HKEY_LOCAL_MACHINE;
     if Reg.OpenKeyReadOnly('SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers') then
     begin
        Providers:=TStringList.Create;
        try
           Reg.GetValueNames(Providers);
           for i := 0 to Providers.Count-1 do
            begin
               if CompareText(DriverName,Providers[i])=0 then
               begin
                 Result:=True;
                 Break;
               end;
            end;
        finally
           Providers.Free;
        end;
     end;
  finally
     Reg.Free;
  end;
end;



begin
  try
   Writeln(ODBC_DriverInstalled('MySQL ODBC 5.1 Driver'));
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  Readln;
end.

要安装,您可以使用多个选项inno setup(可以读取Windows注册表以检查odbc驱动程序),然后安装包含在安装文件中的驱动程序。您也可以使用简单的HTTP GET直接从您的应用程序下载驱动程序,通过here

下载地址

答案 1 :(得分:1)

无需安装MySQL连接器。您只需将正确的dll(取决于服务器版本)放在与应用程序可执行文件相同的文件夹中。我会推荐像InnoSetup这样的安装程序。这也可以让你添加开始菜单快捷方式等。