Hallo.
Ich benutze:
Zeos (Komponenten
TZConnection,
TZQuery) und
Firebird Embedded Server
Ich möchte Folgendes erreichen:
- eine lokale Datei als Datenbank benutzen
- auf die (Datenbank-)Datei als Programm zugreifen
aufs Wesentliche vereinfacht soll das dann so aussehen:
Delphi-Quellcode:
...
// 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;
...
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:
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:
- eine Verbindung zu Firebird Embedded Server herstellen
- Datenbanken erstellen (also Testweise ersteinmal eine)
- die entstandenen (Datenbank-)Dateien weiterverarbeiten
- über Firebird Embedded Server zu den Datenbanken verbinden
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
Embedded SQL Guide dessen Link auf dieser
Firebird-Seite (unter "Interbase 6.0 manuals/Embedded
SQL Guide) zu finden ist. Dort wird gezeigt, wie man Datenbanken öffnet (Seite 41) und sie wieder schließt (Seite 49). - Ich verstehe nicht warum ich u.a. diese Befehle nicht nutzen kann, obwohl ich mich mit Firebird unterhalte.
(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