Как подключиться к базе данных Firebird во время выполнения? - PullRequest
1 голос
/ 31 октября 2011

Мне трудно заставить мой код работать. Я хочу подключиться к базе данных с моим приложением в Delphi 7, но если я изменю папку приложения, например, если я установлю на другом компьютере, мой модуль данных перестанет работать. Ошибка:

Возникла исключительная ситуация класса EdatabaseError с сообщением "Отсутствует свойство Drivername"

Мой фактический код:

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 ]

3 голосов
/ 01 ноября 2011

Я столкнулся с подобной проблемой, когда пытался написать код, который бы открывал базу данных 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; 
 ...
3 голосов
/ 31 октября 2011

Если вы работаете в Windows 7 или Vista и устанавливаете ваше приложение в каталог \ Program Files (любой из них), это не будет работать из-за виртуализации папок в UAC.

Не следует пытатьсяразместить базу данных в том же каталоге, из которого запускается программа.Вам это сойдет с рук на XP и ранее.С тех пор это нет-нет.

Возможно, это не ваша проблема, но определенно это проблема.

2 голосов
/ 01 ноября 2011

Скорее всего, вам не хватает необходимых DLL на целевом компьютере. Вам необходимо выяснить, какие библиотеки DLL должны быть включены в клиентское приложение, и установить их на целевой компьютер. Часто, просто поместив необходимые DLL-файлы в ту же папку, что и EXE-файл, будет работать.

Я не могу понять, что вы используете, так как вы ссылаетесь на Interbase, dbExpress и Firebird, но ваш целевой компьютер, вероятно, не имеет необходимых драйверов.

1 голос
/ 25 января 2019

Вам необходимо развернуть:

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

...