Results 1 to 4 of 4

Thread: Lazarus en Firebird kan geen connectie maken

Hybrid View

  1. #1
    Senior Member AntonSteen's Avatar
    Join Date
    Dec 2006
    Location
    IJsselmonde (Rotterdam)
    Posts
    352

    Lazarus en Firebird kan geen connectie maken

    Oke, het is alweer een tijdje gelden dat ik hier actief ben geweest, maar op de achtergrond toch bezig gebleven.
    Nu loop ik tegen een klein probleempje op, en dat is dat ik vanuit Lazarus geen connectie kan maken met Firebird, embedded wel te verstaan.

    Code:
     unit wuamain;
    
    {$mode objfpc}{$H+}
    
    
    interface
    
    
    uses
      Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
      wuamdb;
    
    
    type
    
    
      { TForm1 }
    
    
      TForm1 = class(TForm)
        Button1 : TButton ;
        procedure Button1Click(Sender : TObject) ;
      private
        MyDB: TDataModule1;
        { private declarations }
      public
        { public declarations }
      end;
    
    
    var
      Form1: TForm1;
    
    
    implementation
    
    
    {$R *.lfm}
    
    
    { TForm1 }
    
    
    procedure TForm1.Button1Click(Sender : TObject) ;
    const
      DBFile = 'test.fdb';
    var
      DBParams : TStringList;
    begin
      MyDB.Connect.HostName := '';
      MyDB.Connect.DatabaseName := DBFile;
      MyDB.Connect.UserName := 'SYSDBA';
      MyDB.Connect.Password := 'masterkey';
      MyDB.Connect.CharSet := 'UTF8';
      MyDB.Connect.Dialect := 3;
      DBParams := TStringList.Create;
      try
        MyDB.Connect.Params.Add('PAGE_SIZE=16384');
        MyDB.Connect.Params := DBParams;
      finally
        DBParams.Free;
      end ;
      if (FileExists(DBFile) = false) then
      begin
        MyDB.SQLT.Active := False;
        MyDB.Connect.Transaction := MyDB.SQLT;
        MyDB.Connect.CreateDB;
        MyDB.Connect.Open;
        MyDB.SQLT.StartTransaction;
        MyDB.Connect.ExecuteDirect('CREATE TABLE WebAcc (id VARCHAR(8), Naam VARCHAR(255));');
        MyDB.SQLT.Commit;
        MyDB.Connect.Close;
      end ;
      MyDB.Connect.Connected := true;
      MyDB.Connect.KeepConnection := True;
    
    
    end;
    
    
    end.

    En dit in het datamodule

    Code:
    {$mode objfpc}{$H+}
    
    interface
    
    
    uses
      Classes, SysUtils, IBConnection, sqldb, FileUtil ;
    
    
    type
    
    
      { TDataModule1 }
    
    
      TDataModule1 = class(TDataModule)
        Connect : TIBConnection ;
        SQLQ : TSQLQuery ;
        SQLT : TSQLTransaction ;
      private
        { private declarations }
      public
        { public declarations }
      end ;
    
    
    var
      DataModule1 : TDataModule1 ;
    
    
    implementation
    
    
    {$R *.lfm}
    
    
    end.
    Wat ik fout doe, volgens mij niets, maar goed ik kan het mis hebben.
    Ik werk met Windows 10 32 & 64 Bits, en uiteraard lazarus 1.6.2 ook 32 & 64 Bits
    Alle info is welkom, en alvast dank daar voor.

    Anton
    Lazarus als hobby, en dan niet in de kroeg
    http://www.wavdsteen.com

  2. #2
    Ik dacht dat Firebird de complete path nodig had.
    Dus
    Delphi Code:
    1. MyDB.Connect.DatabaseName := Application.Location + DBFile;

    Verder... wat doe je hier???
    Delphi Code:
    1. DBParams := TStringList.Create;
    2. try
    3.   MyDB.Connect.Params.Add('PAGE_SIZE=16384');
    4.   MyDB.Connect.Params := DBParams;
    5. finally
    6.   DBParams.Free;
    7. end ;
    Je maakt een TStringList maar vult de MyDB.Connect.Params direct met Add().
    Daarna OVERSCHRIJF je de MyDB.Connect.Params met een LEGE TStringList.
    Dus dit zou voldoende zijn:
    Delphi Code:
    1. MyDB.Connect.Params.Clear;
    2. MyDB.Connect.Params.Add('PAGE_SIZE=16384');

    Verder die je wat met MyDB.SQLT in het blok voor aanmaken van de database terwijl je die helemaal niet nodig hebt.

    Ik had onlangs een test-projectje gepost voor Lazarus/SQLdb/Firebird.
    Kijk daar ook eens naar.
    Daar maak ik de database helemaal aan met dynamisch aangemaakte componenten:
    http://www.nldelphi.com/showthread.p...l=1#post354979

    Daar gebruik ik gewoon de Connected := true;
    En indien je een Exception krijgt, dan pas maak ik de nieuwe database aan.
    (Hostname kun je op '' zetten.)

    b.v.
    Delphi Code:
    1. var
    2.   IB: TIBConnection;
    3. begin
    4.   IB := TIBConnection.Create(nil);
    5.   try
    6.     IB.Transaction := TSQLTransaction.Create(IB);
    7.     IB.Transaction.DataBase := IB;
    8.     IB.DatabaseName := 'c:\temp\test2.fbd';
    9.     IB.HostName := 'localhost';
    10.     IB.UserName := 'SYSDBA';
    11.     IB.Password := 'masterkey';
    12.     try
    13.       IB.Connected := True;
    14.     except
    15.       on E: EDatabaseError do
    16.       begin
    17.         IB.CreateDB;
    18.         IB.Connected := True;
    19.         IB.ExecuteDirect('CREATE TABLE NAME(ID BIGINT PRIMARY KEY);');
    20.         if TSQLTransaction(IB.Transaction).Active then
    21.           TSQLTransaction(IB.Transaction).Commit;
    22.       end;
    23.     end;
    24.   finally
    25.     IB.Free;
    26.   end;
    27. end;

  3. #3
    Senior Member Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    2,085
    Je datamodule staat ook in 2 verschillende variabelen gedefinieerd.

    In de datamodule zelf : Datamodule1: TDatamodule1;
    en in je form als private: MyDB: TDataModule1;

    Zijn de verwijzingen goed?
    Ik zou een van de twee verwijderen om vergissing te voorkomen.


    Gr.Peter
    10.4.2, Delphi2010, of Lazarus 2.2.0

  4. #4
    Senior Member AntonSteen's Avatar
    Join Date
    Dec 2006
    Location
    IJsselmonde (Rotterdam)
    Posts
    352
    Heeft even geduurd.
    Ik heb het voorbeeldje gedownload, en deze nagebouwd, en dat werkt inderdaad als een zonnetje, dank daarvoor Rik.
    Nu op mijn gemak werken aan een uitbreiding.
    Dank voor je hulp.

    Anton
    Lazarus als hobby, en dan niet in de kroeg
    http://www.wavdsteen.com

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •