![]() |
Datenbank: Firebird Embedded Server • Version: 1.5 • Zugriff über: Zeos Komponenten
Fragen: FB SQL-Befehle, TZConnection, Datenbankdateizugriff
Hallo.
Ich benutze: Zeos (Komponenten TZConnection, TZQuery) und Firebird Embedded Server Ich möchte Folgendes erreichen:
aufs Wesentliche vereinfacht soll das dann so aussehen:
Delphi-Quellcode:
Der Quelltext soll das Ziel zeigen. Im Test scheitert er an der Zeile {1} mit der Exception die sagt, das er das Token "EXEC" nicht kennt:
...
// in der Klassendefinition ZConnection1 :TZConnection; ZQuery1 :TZQuery; ... // mitteilen, dass eine neue Datenbank angelegt werden soll ZConnection1.Properties.Add('CreateNewDatabase=CREATE DATABASE ''MyDB.fdb'' '+ 'PAGE_SIZE 8192 USER ''SYSDBA'' PASSWORD ''masterkey'' '+ 'DEFAULT CHARACTER SET ISO8859_1'); ZConnection1.Connect; // Firebird anweisen, Datenbank und Datei zu schließen ZQuery1.SQL.Add('EXEC SQL'); ZQuery1.SQL.Add(' DISCONNECT ALL;'); ZQuery1.SQL.ExecSQL; ZQuery1.SQL.Clear; {1} ZConnection1.Disconnect; // <-- überhaupt nötig? ... // an dieser Stelle würde ich gern mit der Datei selbst arbeiten // (später räumliche und zeitliche Trennung hier) ... ZConnection1.Connect; // <-- überhaupt nötig? // Firebird anweisen, Datenbank und Datei zu öffnen ZQuery1.SQL.Add('EXEC SQL'); ZQuery1.SQL.Add(' CONNECT ''MyDB.fdb'' AS DB1;'); ZQuery1.SQL.ExecSQL; ZQuery1.SQL.Clear; ZConnection1.Disconnect; ... SQL Error: Dynamic SQL error code = -104 Token unknown - line 1, char 1 EXEC. Error Code: -104. Invalid token The SQL: EXEC SQL DISCONNECT ALL; Sinngemäß soll folgendes passieren:
Meine Probleme auf diesem Weg sind: (1) ZConnection verlangt immer die Angabe einer Datenbank? Ich möchte gern die SQL-Befehle benutzen um Datenbanken zu erstellen. ZConnection möchte aber immer vor Verbindungsaufbau eine Datenbank genannt bekommen. Selbst wenn ich den Umweg gehen muss, für jede Datenbank eine extra Connection aufzubauen: Wie kann ich mich mit Firebird verbinden um dann SQL-Befehle auzufühen? - Das bringt mich schon zu meinem nächsten Problem: (2) Ich kann nicht alle SQL-Befehle nutzen? Wie oben im Beispiel mit DISCONNECT gezeigt gilt dies auch für CONNECT, SET SQL DIALECT 3, ... Selbst wenn die Zeile EXEC SQL falsch sein sollte und ich sie auskommentiere, entsteht der gleiche Fehler mit gleichartigem Inhalt. Als Referenz für die SQL-Kommandos benutze ich den ![]() ![]() (3) Wie kann Firebird dazu gebracht werden eine Datei zu schließen? (So, dass man selbst Zugriff auf die Datei haben kann.) Nach einem ZConnection1.Disconnect; hat Firebird leider immernoch die Finger auf der Datenbankdatei. Ich möchte sie jedoch gern weiterbearbeiten und möchte das Firebird mitteilen. Wie geht das, wenn nicht durch Disconnect? Hm... Viele Fragen, wenig Antworten. Bitte um Hlfe. Panthrax |
Re: Fragen: FB SQL-Befehle, TZConnection, Datenbankdateizugr
hallo,
viele antworten auf deine fragen findest du hier: ![]() raik |
Re: Fragen: FB SQL-Befehle, TZConnection, Datenbankdateizugr
Nein, finde ich leider nicht.
TZConnection ist eine Komponente der ![]() SQL-Befehle werden nicht ansatzweise ausreichend behandelt, um mir weiterhelfen zu können. Und zum Umgang mit Firebird aus dem eigenen Programm heraus wird nicht eingegangen. Es wird erklärt, wie Firebird Embedded Server "installiert" wird und wie man mit Hilfe der Programme IBOConsole und Interbase DataPump v3.4 direkt an den Datenbanken arbeiten kann. Es wird auch gezeigt, wie man mit Hilfe dieser Programme zum Firebird Embedded Server migieren kann. Das hilft mir aber nicht weiter. Ich möchte Firebird aus dem Quelltext heraus verwenden. Panthrax |
Re: Fragen: FB SQL-Befehle, TZConnection, Datenbankdateizugr
hallo ,
leider kenn ich mich mit zeos nicht aus, aber bei ibx ist es so, das du mit IBtransaction einen verbindung zur DB herstellt und diese wieder schliesst. ergo solltest du bei den zeos suchen, welche komponenete für die transaction zuständig ist. raik |
Re: Fragen: FB SQL-Befehle, TZConnection, Datenbankdateizugr
Ich habe mich auf der Seite, die du oben nanntest, umgesehen. Es gibt dort etwas, das kommt meinem Problem schon näher:
![]() Dinge wie:
Delphi-Quellcode:
scheitern daran, dass das Token (hier: DISCONNECT) unbekannt ist.
ZQuery1.Add('DISCONNECT ALL;');
ZConnection1.StartTransaction; try ZQuery1.ExecSQL; except ZConnection1.Rollback; end; ZConnection1.Commit; Es bleibt die Frage: Warum kennt Firebird seine eigenen SQL-Befehle nicht? Oder woran scheitert es? Panthrax |
Re: Fragen: FB SQL-Befehle, TZConnection, Datenbankdateizugr
bist du sicher, das das ein befehl von firebird ist?
|
Re: Fragen: FB SQL-Befehle, TZConnection, Datenbankdateizugr
|
Re: Fragen: FB SQL-Befehle, TZConnection, Datenbankdateizugr
na das nenn ich mal ne antwort, da ist alles dabei :thumb:
gleich mal in die linkliste aufnehmen, falls ich mal mit den zeos arbeiten sollte raik |
Re: Fragen: FB SQL-Befehle, TZConnection, Datenbankdateizugr
@kiar: Ich habe oben angegeben, das ich als Befehlsreferenz für SQL die Dokumentation von
![]() @ol1uw: Danke für den Hinweis. Aber die Seite kannte ich schon. Ich bin ![]() ![]() Panthrax |
Re: Fragen: FB SQL-Befehle, TZConnection, Datenbankdateizugr
Moin,
reicht Dir ein
Delphi-Quellcode:
nicht aus ?
ZConnection1.Disconnect;
Irgendwie verstehe ich das Problem nicht. Tschüss, Lutz |
Re: Fragen: FB SQL-Befehle, TZConnection, Datenbankdateizugr
Nein, leider scheint ein Disconnect nicht auszureichen.
Beispiel (Datenbankdatei: 'MyDB.fdb')
Delphi-Quellcode:
Exception:
...
var Stream :TStream; ... ZConnection1.Connect; ZConnection1.Disconnect; // Hier folgt die Exception: Stream:=TFileStream.Create('MyDB.fdb',fmOpenRead,fmShareExclusive); ... Datei '...\MyDB.fdb' kann nicht geöffnet werden. Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird. Wie also kann ich die Verbindung zwischen Datei und Firebird lösen? Panthrax |
Re: Fragen: FB SQL-Befehle, TZConnection, Datenbankdateizugr
Unter Umständen könnte es schon reichen nach dem Schließen eine kurze Zeit zu warten. Ich kann mir vorstellen, dass die DB mit dem Schließen noch nicht fertig ist, wenn dein Programm aber schon Zugriff auf das File will. Klatsch da einfach mal ein Sleep(sec); zwischen. Evtl. tut's das schon.
Gruss, Fabian |
Re: Fragen: FB SQL-Befehle, TZConnection, Datenbankdateizugr
Hab's mit einem Sleep probiert - funktioniert nicht. Auch nicht wenn ich das Programm anderweitig beschäftige. Letzteres hatte ich vorher schon probiert.
Panthrax. |
Re: Fragen: FB SQL-Befehle, TZConnection, Datenbankdateizugr
Zitat:
ich behaupte mal weiterhin, dass ein einfaches Disconnect ausreicht. Man kann sogar mehrere Zconnections innerhalb des gleichen Programms auf die gleiche DB zugreifen lassen. Der von Dir beschriebene Fehler tritt auf, wenn ein anderer Prozess, sprich ein anderes Programm auf die DB Zugriff hat (Z.B. ein DB-Admin-Tool, die Delphi-IDE mittels einer Kompo die zur Design-time aktiv ist, etc...). (Wenn ich jetzt irgendwelchen Unsinn rede, dann bitte ich um Korrektur) Ausserdem, bist Du Dir sicher, dass der Fehler nach dem Disconnect auftritt, oder eher bei dem TFileStream.Create ??? Wie auch immer, ich hab Dein Beispiel kurz nachgebaut und habe keine Probleme / Fehler. (Abgesehen davon, dass ich keinen Sinn darin sehen kann, die DB mittels FileStream.Create öffnen zu wollen). Dein Problem muss eher an aderer Stelle liegen. Tschüss, Lutz |
Re: Fragen: FB SQL-Befehle, TZConnection, Datenbankdateizugr
Hi,
@Panthrax: Hab Deine PN bekommen, hatte das Projekt leider nicht mehr. Also schnell noch mal gebaut, und hop, gleiches PB wie Du. Im Endeffekt scheint es wie folgt auszusehen : Mit dem FileStream.Create läuft es nur, wenn die aktuelle Instanz des Programmes die DB nicht erstellt hat. Hat die aktuelle Instanz des Progs die DB erstellt, hilft auch ein Disconnect nichts. Ich hab noch schnell versucht, die ZConnection, die für das DB Create benutzt wird, dynamisch zu erstellen und hinterher wieder zu löschen. Ändert nichts. Noch'n Bug der Zeos !!! ??? Tschüss, Lutz NB.: Ich frag mich langsam, ob man die Zeos benutzen sollte ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz