Einzelnen Beitrag anzeigen

Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#1

Fragen: FB SQL-Befehle, TZConnection, Datenbankdateizugriff

  Alt 19. Feb 2005, 20:41
Datenbank: Firebird Embedded Server • Version: 1.5 • Zugriff über: Zeos Komponenten
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
  Mit Zitat antworten Zitat