How to connect in a firebird database in execution time?

Vitor Rangel picture Vitor Rangel · Oct 31, 2011 · Viewed 8.1k times · Source

I'm having a hard time to make my code work. I want to connect to a database with my application in Delphi 7, but if I change the folder of the application, for example, if I install in another computer, my datamodule stops working. The error is:

Raised exception class EdatabaseError with message "Missing Drivername propriety"

My actual code is:

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;

I want to connect to the database using my .exe, on any path or install location.

Answer

Chris Thornton picture Chris Thornton · Oct 31, 2011

If you are running Windows 7 or Vista, and install your app into the "\Program files" (either one) directory, this will not work due to folder virtualization within UAC.

You should NOT attempt to place the database within the same directory that the program is running from. You will get away with it on XP and earlier. From then on, it's a no-no.

This may not be your problem, but it definitely IS a problem.