我很难让我的代码工作。我想用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在任何路径或安装位置连接到数据库。
答案 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.ini
和dbxdrivers.ini
的位置,我的版本是delphi 10.3,因此注册表项位于
HKEY_CURRENT_USER > Software > Embarcadero > BDS > 20.0 > DBExpress
Connection Registry File
值是dbxconnections.ini
的路径
Driver Registry File
值是dbxdrivers.ini