1

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

引发异常类 EdatabaseError 并带有消息“缺少驱动程序名称”

我的实际代码是:

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

4 回答 4

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; 
 ...
于 2011-11-01T08:37:05.007 回答
3

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

您不应尝试将数据库放在运行程序的同一目录中。你会在 XP 和更早的版本上摆脱它。从那时起,这是一个禁忌。

这可能不是你的问题,但它绝对是一个问题。

于 2011-10-31T19:55:32.643 回答
2

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

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

于 2011-11-01T15:01:45.860 回答
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 Filevalue 是路径dbxconnections.ini Driver Registry Filevalue 是路径dbxdrivers.ini

于 2019-01-25T18:18:16.463 回答