如何在执行时间连接firebird数据库?

时间:2011-10-31 19:50:45

标签: delphi firebird datamodule

我很难让我的代码工作。我想用Delphi 7中的应用程序连接到数据库,但是如果我更改应用程序的文件夹,例如,如果我安装在另一台计算机上,我的数据模块就会停止工作。错误是:

  

引发异常类EdatabaseError,消息“Missing Drivername propriety”

我的实际代码是:

procedure TDataModule1.DataModuleCreate(Sender: TObject);
var
  conexao : TSQLConnection;
begin
   with SQLConnection1 do
    begin
        ConnectionName := 'SKY';
        DriverName := 'Interbase';
        LibraryName := 'dbexpint.dll';
        VendorLib := 'gds32.dll';
        GetDriverFunc := 'getSQLDriverINTERBASE';
        LoadParamsOnConnect := true;
        LoginPrompt := False;
        Params.Add('Database='+ExtractFilePath(Application.ExeName)+'\Banco\FLY_SKY_DESK.FDB');
        Params.Add('User_Name=SYSDBA');
        params.Add('Password=masterkey');
        Params.Add('SQLDialect=3');
        Open;
    end;
      SQLConnection1.Connected:=true;
end;

我想使用我的.exe在任何路径或安装位置连接到数据库。

4 个答案:

答案 0 :(得分:3)

如果您运行的是Windows 7或Vista,并将应用程序安装到“\ Program files”(任一)目录中,则由于UAC中的文件夹虚拟化,这将无法正常工作。

您不应尝试将数据库放在运行程序的同一目录中。你将在XP及更早版本中侥幸成功。从那以后,这是一个禁忌。

这可能不是你的问题,但肯定是个问题。

答案 1 :(得分:3)

当我尝试编写可以从线程打开Firebird数据库的代码时,我遇到了类似的问题。代码看起来像是在使用dbExpress TSQLConnection;如果你使用IB组件会更容易,特别是TIBDatabase。然后你的代码变成类似下面的代码

var
 ibdb: TIBDatabase;
 qDefaults: TIBQuery;
 trans: TIBTransaction;

begin
 ibdb:= TIBDatabase.Create (nil);
 ibdb.databasename:= ExtractFilePath(Application.ExeName)+'\Banco\FLY_SKY_DESK.FDB')
 ibdb.loginprompt:= false;
 ibdb.params.add ('password=masterkey');
 ibdb.params.add ('user_name=sysdba');
 ibdb.sqldialect:= 3;
 ibdb.connected:= true;
 trans:= TIBTransaction.create (nil);
 trans.defaultdatabase:= ibdb;
 qDefaults:= TIBQuery.create (nil);
 qDefaults.database:= ibdb;
 qDefaults.transaction:= trans;
 qDefaults.sql.Add ('select * from defaults');
 qDefaults.active:= true; 
 ...

答案 2 :(得分:2)

您很可能错过了目标计算机上所需的DLL。您需要确定客户端应用程序应包含哪些DLL并将其安装在目标计算机上。通常,只需将所需的DLL放在与EXE相同的文件夹中即可。

由于您引用了Interbase和dbExpress以及Firebird,我无法弄清楚您正在使用什么,但您的目标计算机可能没有所需的驱动程序。

答案 3 :(得分:1)

您需要部署:

dbxconnections.ini
dbxdrivers.ini 
dbxfb.dll 
fbclient.dll 
midas.dll {in case you used ClientDatasSet and you didn't include MidasLib into uses clause}

在与您的Exe一起部署所有这些文件之后,您将需要更新注册表项以指向dbxconnections.inidbxdrivers.ini的位置,我的版本是delphi 10.3,因此注册表项位于

HKEY_CURRENT_USER > Software > Embarcadero > BDS > 20.0 > DBExpress

Connection Registry File值是dbxconnections.ini的路径 Driver Registry File值是dbxdrivers.ini

的路径