![]() |
Datenbank: Embedded Firebird • Version: 1.5 • Zugriff über: Zeos Komponente
Firebird und Tabelle löschen?
Ich versuche schon krampfhaft es hinzubekommen eine Tabelle aus einer Datenbank zu löschen. Klar eigentlich kein Problem, Problem nur ich weis doch nicht ob die Datenbank existiert!? Was bei MySQL prima funktioniert ist einfach
SQL-Code:
Aber den Ausdruck IF EXISTS kennt Firebird nicht. Wenn die Tabelle vorhanden ist, geht es mit DROP TABLE tabelle, aber wenn sie nicht da ist, gibt es einen Fehler. Oder umgekehrt, wenn die Tabelle vorhanden ist und ich mache ein CREATE TABLE dann hat er dazu auch keine Lust, verständlich.
DROP TABLE IF EXISTS tabelle;
CREATE TABLE tabelle (...) |
Re: Firebird und Tabelle löschen?
kann man den fehler nicht irgendwie abfangen?
|
Re: Firebird und Tabelle löschen?
Mittels
SQL-Code:
kriegst du eine Liste deiner Tabellen in deiner Datenbank. Vielleicht kannst Du damit was anfangen.
select rdb$relation_name from rdb$relations where not (rdb$relation_name like 'RDB$%')
Nachtrag: Besser noch so:
SQL-Code:
if exists (select 1 from RDB$RELATIONS where RDB$RELATION_NAME='DeineTabelle')
then drop table DeineTabelle; |
Re: Firebird und Tabelle löschen?
Nehmen wir mal an meine Tabelle heißt >main<. Dann sieht mein Code so aus:
Delphi-Quellcode:
da gibt es ein >Invalid token<
SQL.Add('if exists (select 1 from RDB$RELATIONS where RDB$RELATION_NAME=''main'') ');
SQL.Add('then '); SQL.Add('drop table main;'); |
Re: Firebird und Tabelle löschen?
Hi folks.
Anstelle von IF ... DROP TABLE ... CREATE TABLE (...) könntet ihr es auch so machen:
SQL-Code:
Das DDL Statement RECREATE ist das Firebird Äquivalent zu dem MYSQL-Code aus Beitrag #1.
RECREATE TABLE test (...)
Grüße vom marabu |
Re: Firebird und Tabelle löschen?
mmh, naja das hier funktioniert Problemlos;
Delphi-Quellcode:
hingegen das mit einer Fehlermeldung; Token unknown - line 1, char 0 RECREATE
SQL.Add('CREATE TABLE main ('+
'BOOKNO CHAR(6), '+ 'TITLE CHAR(50) COLLATE ISO8859_1, '+ 'EUROPUB CHAR(50) CHARACTER SET ISO8859_1 COLLATE FR_FR);');
Delphi-Quellcode:
SQL.Add('RECREATE TABLE main ('+
'BOOKNO CHAR(6), '+ 'TITLE CHAR(50) COLLATE ISO8859_1, '+ 'EUROPUB CHAR(50) CHARACTER SET ISO8859_1 COLLATE FR_FR);'); |
Re: Firebird und Tabelle löschen?
Dann gibt es nur zwei Erklärungen: Entweder ich will dir einen Bären aufbinden oder du verwendest einen Parser, der den aktuellen Sprachumfang nicht beherrscht. Was denkst du?
marabu |
Re: Firebird und Tabelle löschen?
Hallo marabu,
ich schließe mal die Bärenversion aus. :mrgreen: Die Frage aber bleibt, an was es liegt. Prüft die Zeos Komponente vorher tatsächlich den SQL String? Wahrscheinlich doch nicht, oder? Ist die embedded Version von FB eingeschränkt? Auch hier: wohl eher nicht. Wer also erzeugt die Fehlermeldung? |
Re: Firebird und Tabelle löschen?
Hallo Albert,
ältere Versionen von IBExpert (z.B. Version 2.5) hatten Probleme mit dem RECREATE Statement und lieferten genau diese Fehlermeldung - wenn ich mich richtig erinnere. SQL.Add() in Verbindung mit ZEOS macht auch mich stutzig - jetzt wo du es geschrieben hast. marabu |
Re: Firebird und Tabelle löschen?
Hab es auch mit SQL.Text:='RECREATE ...' versucht, bleibt aber das gleiche. Die Komponente hab ich von hier geladen:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:13 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