Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Verbindung zum Firebird embedded per .Net Data Provider (https://www.delphipraxis.net/29209-verbindung-zum-firebird-embedded-per-net-data-provider.html)

Mamphil 5. Sep 2004 16:12


Verbindung zum Firebird embedded per .Net Data Provider
 
Hi!

Ich hoffe, ich bin auf dem richtigen Dampfer, habe nämlich überhaupt nichts zum Folgenden auf delphipraxis.net gefunden...

Ich habe den Firebird .Net Data Provider hier heruntergeladen, installiert und als Delphi-Komponente registriert. Es sieht für mich so aus, als müsste ich die Funktion FbConnection(connectionString) zum Verbindungsaufbau zu Datenbank verwenden. Leider habe ich keinen blassen Schimmer, wie ich das anstellen soll, da ich bisher nur Beispiele für andere Sprachen als Delphi gefunden habe. Der Zusammenbau der Variable connectionString ist kein Problem, nur wie erstelle ich nun die Verbindung?

Danke für eure hilfreichen Antworten!

Mamphil

PS: Ja, ich habe schon gesucht und nein, zum Suchbegriff Hier im Forum suchenfbConnection gibt es hier nichts.

Robert_G 5. Sep 2004 17:45

Re: Verbindung zum Firebird embedded per .Net Data Provider
 
Dir ist nicht zufällig der Link zur Doku aufgefallen? :mrgreen:

Ich hoffe mal, der Fb-Provider hält sich an die Standards (Wenn nicht dürfte er sich nicht Data-Provider nennen ;) ).
Dann könnte das Ganze so aussehen:
Delphi-Quellcode:
var
  Connection    :FbConnection;
  SelectSomeJunk :FbCommand;
  daSomeJunk    :FbDataAdapter;
  dsJunk        :DataSet;

  ConnStr       :string;
begin
  {$region 'create DB Objects'}

  ConnStr := System.String.Format('Database={0};User={1};Password={2};Dialect={3};Server={4}'
                                 , "C:\\miep.gdb"
                                 , "SYSDBA"
                                 , "masterkey"
                                 , 3
                                 , "www.nix.net");

  Connection := FbConnection.Create(ConnStr);

  SelectSomeJunk := FbCommand.Create('SELECT X FROM Y WHERE Z is not null'
                                    , Connection);

  daSomeJunk := FbDataAdapter.Create(SelectSomeJunk);

  dsJunk    := DataSet.Create();

  {$endregion}

  Connection.Open();
  daSomeJunk.Fill(dsJunk);
  Connection.Close();

  SomeDataGrid.DataSource = dsJunk;
end;
Edit: Auf Nachfrage im Chat zu Delphi übersetzt....

Mamphil 6. Sep 2004 16:01

Re: Verbindung zum Firebird embedded per .Net Data Provider
 
Hi!

Vielen Dank, Robert_G, für deine ausführliche und gut verständliche Antwort. Der Code hatte zwar ein paar Probleme gemacht, die sind aber gelöst :coder2:

Also, hier ist der funktionstüchtige Code:
Delphi-Quellcode:
{$region 'create DB Objects'}

  ConnStr := 'Database=' + Application.StartUpPath + '\test.fdb;User=SYSDBA;Password=masterkey;Dialect=3;Server=localhost;ServerType=1';

  Connection := FbConnection.Create(ConnStr);

  SelectSomeJunk := FbCommand.Create('SELECT * FROM RDB$RELATIONS;'
                                    , Connection);

  daSomeJunk := FbDataAdapter.Create(SelectSomeJunk);

  dsJunk    := DataSet.Create();

  {$endregion}

  MessageBox.Show(ConnStr);

  Connection.Open();
  try
    daSomeJunk.Fill(dsJunk);
  except
    on ex: Exception do MessageBox.Show(ex.Message);
  end;
  Connection.Close();

//  SomeDataGrid.DataSource = dsJunk;
Ein paar Kommentare:

Delphi-Quellcode:
ConnStr := System.String.Format('Database={0};User={1};Password={2};Dialect={3};Server={4}'
                                 , 'C:\\miep.gdb'
                                 , 'SYSDBA'
                                 , 'masterkey'
                                 , '3'
                                 , 'localhost');
habe ich auskommentiert, weil es irgendwie nicht ging. Die Zeile mit der '3' lieferte beim Kompilieren den Fehler "zu viele Parameter". Vielleicht weiß diesbezüglich jemand Rat? Außerdem habe ich dort statt der doppelten Anführungszeichen (") einfache (') verwendet, erstere hat der Compiler nicht geschluckt.

Für den embedded Server funktioniert dieser Connection-String aber trotzdem nicht. Es fehlte der Parameter ServerType=1, der für embedded Server benötigt wird.

Ansonten habe ich keine wesentlichen Änderungen vorgenommen.

Noch einmal: Vielen Dank!

Mamphil

Robert_G 6. Sep 2004 22:48

Re: Verbindung zum Firebird embedded per .Net Data Provider
 
Zitat:

Zitat von Mamphil
Die Zeile mit der '3' lieferte beim Kompilieren den Fehler "zu viele Parameter". Vielleicht weiß diesbezüglich jemand Rat?

Hihi, das ist witzig. :mrgreen:

String.Format ist hinten mit einem Parameter als "params" deklariert -> _Eigentlich_ sollte man ihm soviele Parameter geben können, wie man lustig ist.
Aaaabeeer da es D8 nicht auf die Reihe bekommt das zu erkennen musst du ihm wohl oder übel einen array of object übergeben.
Code:
ConnStr := System.String.Format([color=#aa2200]'Database={0};User={1};Password={2};Dialect={3};Server={4}'[/color]
                                 ,[color=#ff0000][b][size=18][[/size][/b][/color][color=#aa2200] 'C:\miep.gdb'[/color]
                                   , [color=#aa2200]'SYSDBA'[/color]
                                   , [color=#aa2200]'masterkey'[/color]
                                   , [color=#aa2200]'3'[/color]
                                   , [color=#aa2200]'localhost'[/color][color=#ff0000][b][size=18]][/size][/b][/color]);

Zitat:

Zitat von Mamphil
Außerdem habe ich dort statt der doppelten Anführungszeichen (") einfache (') verwendet, erstere hat der Compiler nicht geschluckt.

ups, die waren noch vom C#-Code übrig ;)

Mamphil 7. Sep 2004 12:42

Re: Verbindung zum Firebird embedded per .Net Data Provider
 
Hi!

Super, vielen Dank, wieder was gelernt. Falls jemand noch mal nach embedded Firebird sucht, hier mein übersichtlicherer Connection-String:
Delphi-Quellcode:
  ConnStr := System.String.Format('Database={0};User={1};Password={2};Dialect={3};Server={4};ServerType={5}'
                                 ,[ Application.StartUpPath + '\test.fdb' // Database, absoluter Pfad zum Datenbank-File
                                   , 'SYSDBA'                            // User, Standard-Benutzer für embedded Firebird
                                   , 'masterkey'                         // Password, Standard-Kennwort für embedded Firebird
                                   , '3'                                 // Dialect, der zu verwendene SQL-Dialekt
                                   , 'localhost'                         // Server
                                   , '1'                                 // ServerType, Standard '0', für embedded '1'
                                  ]);
Ggü. der obigen Lösung kam der Parameter ServerType hinzu, der für den Betrieb als embedded Server notwendig ist.

Mamphil

EDIT: Delphi-Code kommentiert


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:04 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz