IBConnection - verbinden

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

IBConnection - verbinden

Beitrag von monta »

Weiß jemand zufällig, was diese Fehlermeldung genau bedeutet:

Firebird interface already initialized from library gds32.dll

Diese Meldung erscheint, wenn ich wie von Delphi gewohnt bei TIBConnection nach eingabe der entsprechenden Daten verbinden will. (Also Connected auf true stelle)

//Nachtrag, gehe ich richtig in der Ahnname, das es nur mit dem alten Dateinamen gds32.dll zusammenhängt? Wenn ja, kann man diesen irgendwie umstellen, also nicht die Datei, sondern den Zugriff darauf?


Noch ein Nachtrag, hat schon jemand die Zeos-Komponenten für Lazarus verwendet? Ich möchte eine neue DB-Anwendung schreiben und da ich Zeos schon zu Delphizeiten genohmen hab, möchte ich die eigentlich wieder nutzen.

knight
Beiträge: 802
Registriert: Mi 13. Sep 2006, 22:30

Beitrag von knight »

Als ich Firebird installierte kam eine Meldung, ob ich die Client Bibliothek als gds32.dll (der Dateiname stammt von Interbase) registrieren lassen möchte. Dies habe ich bejaht und habe damit keine Probleme mit Komponenten, die eigentlich nur für Interbase vorgesehen waren.
Wie hast du versucht, die Verbindung herzustellen? Vom Objektinspektor ist derzeit eher abzuraten, da es diesbezüglich noch Probleme gibt. Sicher ist nur die Einstellung im Quelltext selbst.

knight

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Ja, die Meldung kamm bei mir auch. Inzwischen funktioniert es auch, zumindest mit dem verbinden.
Aber ich bekomme keine Daten als ergebnis meiner Abfrage, allerdings auch keine Fehlermeldung, und ich bin eigentlich davon überzeugt, das es so gehen müsste:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
IBConnection1.DatabaseName := 'G:\*\*****.FDB';
IBConnection1.Dialect := 3;
IBConnection1.HostName := 'localhost';
IBConnection1.UserName := 'sysdba';
IBConnection1.Password := 'masterkey';
SQLTransaction1.Database := IBConnection1;
SQLQuery1.Close;
SQLQuery1.Database := IBConnection1;
IBConnection1.Connected := True;
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add('select * from tmain');
SQLQuery1.Open;
end;


Dann noch eine Datasource auf die Query und ein DB Grid zur anzeige aber der bleibt leer.

knight
Beiträge: 802
Registriert: Mi 13. Sep 2006, 22:30

Beitrag von knight »

Könnte es sein, daß die Query ausgeführt (execute) werden muß anstatt sie zu öffnen?

knight

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Open müsste eigentlich richtig sein.

Ich hab es inzwischen allerdings auch hinbekomen es schon bei der Entwicklung zu setzen und es funzt so jetzt auch. Und auch die Abfragen gehen inzwischen, kann allerdings nicht genau sagen, woran vorher der fehler lag. Aber Open ist richtig, damit gehts jetzt nämlich.

xnalpf
Beiträge: 43
Registriert: Di 4. Sep 2007, 15:43

Beitrag von xnalpf »

Ich hatte das gleiche Problem. Nachdem ich Lazarus beendet hatte und neu gestartet hatte war plötzlich alles OK. Keine Ahnung warum. Dafür hab ich jetzt ein anderes Problem. Ich benutze in einem Projekt, welches unter Windows und Linux laufen soll eine IBConnection um auf eine DB zuzugreifen.
Nun sind natürlich die Pfade zur Datenbank unter Linux und Windows total verschieden. Und ich kann ja auch nicht immer sicher sein, dass der DB-Server wirklich läuft. Daher habe ich diesen Code eingebaut:

Code: Alles auswählen

try
    IBConnection1.Open;
  except
    showmessage('Fehler bei Datenbankinitialisierung');
  end;

Dummerweise hängt das Programm wenn die Connection nicht zusatnde kommt beim Aufruf von Open bis in alle Ewigkeit und läuft nie in die Exception rein.
Kann mir da jemand helfen?

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

Versuchs mal mit IBConnection1.Connected von false auf true. open und connected sind nicht gleich.

Prinzipell kannst du auf connected abfragen. damit mußt du nicht gleich eine Exception schmeißen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

xnalpf
Beiträge: 43
Registriert: Di 4. Sep 2007, 15:43

Beitrag von xnalpf »

Hab ich schon gemacht. Hab auch im Objektinspektor schon connected auf true gesetzt. Danach hing Lazarus komplett. Ich hab die DB aber auch unter Windows mit der 1.5er Version von FB erzeugt und arbeite unter Linux nun mit der 2.0er. Jetzt installier ich gerade unter win die 2.0er und teste dann mal auf die DB. Wenn das auch nicht klappt erzeug ich die DB mit 2.0 neu und berichte...

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

xnalpf hat geschrieben:Hab ich schon gemacht. Hab auch im Objektinspektor schon connected auf true gesetzt. Danach hing Lazarus komplett.


Kenn ich, nur bei mir, ist dann nach ca. 2-5 Minuten, dann doch ein Fehler gekommen bzw. hat er das Connected auf false gelassen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

xnalpf
Beiträge: 43
Registriert: Di 4. Sep 2007, 15:43

Beitrag von xnalpf »

So. Weiter gehts. Hab jetzt unter Win getestet. Firebird 2.0.1 auf die gleiche DB und - geht. Wenn ich den Linux-Pfad auf die DB setze krieg ich ne DB exception und meine message poppt hoch. Wenn ich den richtigen (win) Pfad setze kommt keine exception und die DB wird geöffnet. Dann wieder Linux gestartet, Projekt geladen, Pfad auf Linux gestellt und - nickes. Projekt hängt und nix passiert. Irgendwie klappt das mit der Connection auf den DB Server nicht. Werde wohl mal die Firewall anschauen müssen. Vielleicht macht die SuSE Firewall ja den IB Port dicht...

xnalpf
Beiträge: 43
Registriert: Di 4. Sep 2007, 15:43

Beitrag von xnalpf »

Nu hab ich die Firewall ganz runtergefahren und das hat auch nix gebracht. Jetzt schau ich mich mal nach anderen tools für Firebird unter linux um damit ich checken kann ob die connection überhaupt geht...

xnalpf
Beiträge: 43
Registriert: Di 4. Sep 2007, 15:43

Beitrag von xnalpf »

Hab jetzt einfach mal mysql ausprobiert und das klappt auch nicht. Wahrscheinlich mache ich irgendwas grundlegendes flasch. Hab mir aber das Tutorial im wiki mal angeschaut und nachprogrammiert. Die greifen einfach auf die Datenbank mysql zu und zeigen dann alle Tabellen an. Das klappt bei mir auch nicht. Ich krieg zwar die Connection auf den Server hin, aber wenn ich mit einer Query SQL statements absetzen will kommt ein server connect error. Komisch ist auch, das unter win alles funktioniert. Hat hier irgendjemand unter Opensuse 10.2 auf einem 64-Bit System mit Interbase oder mySQL eine DB-Anwendung hingekriegt? Wäre jetzt über jede Hilfe erfreut.

xnalpf
Beiträge: 43
Registriert: Di 4. Sep 2007, 15:43

Beitrag von xnalpf »

Ach du grüne neune! Das kommt davon, wenn keine anständigen Fehlermeldungen kommen und nix irgendwohin loggt. Jetzt läuft meine Anwendung mit mySQL. Dummerweise muss ich dazu root sein. Ich hab natürlich die ganze Zeit brav als non-root gearbeitet. Komischerweise hab ich in myphpadmin einen passenden DB-User angelegt und dem auch alle Rechte auf die DB und die Tabellen gegeben. Trotzdem klappt es nicht. Aber da hat ja vielleicht jemand hier einen Tipp für mich oder ich such noch was im inet rum. mySQL ist ja hinreichend beschrieben. Ganz nützlich fände ich es auch, wenn mir jemand erklären könnte, wie ich mysql etwas "redseeliger" machen kann. Im logfile steht stumpf "mysql started" und das war's dann. Ich hab auch im start-script schon ein --log dazugepackt. Wird aber auch nicht mehr.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

MySQl kann ganz schön plaudern. Leider muß man dazu die Dokus und HowTos durcharbeiten, damit man die entsprechenden Einträge und Schalter findet. Ein Log allein reicht nicht, man muß spezifizieren welche der vielen möglichen Logs man haben will.

Frage wo läuft der MySQL ? Win oder Linux ? Unter WIn haben sie 2 GUI Apps hinbekommen, um einen MySQL einfacher zu Administrieren, da ist die Konfiguration von Logs + betrachten auch leichter.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

xnalpf
Beiträge: 43
Registriert: Di 4. Sep 2007, 15:43

Beitrag von xnalpf »

Momentan läuft das ganze unter Linux. Komisch ist auch, dass ich extra einen neuen User in der DB angelegt habe und dieser auch offensichtlich von der Komponente genommen wird. Wenn ich etwas am Passwort ändere bekomme ich auch als root einen dbconnect fehler. Also entweder macht die Komponente murks oder mySQL lässt keine connections von non-root usern zu. Letzteres kann ich mir eigentlich nciht vorstellen. Naja, ich werde dann mal mySQL für Win installieren und erst mal weiterentwickeln. Vielleicht findet sich ja noch eine Lösung für mein Userproblem...

Antworten