![]() |
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:
![]() |
Re: Firebird und Tabelle löschen?
Mal ganz blöd gefragt... Wie führst Du denn den Befehl am Firebirdserver aus. Welche Zeoskomponente benutzt und wie lautet die Methode?
|
Re: Firebird und Tabelle löschen?
hast du schon mal versucht, den befehl direkt aus isql abzufeuern?
kommt da der fehler auch? wenn ja, dann liegt's an firebird, und du verwendest tatsächlich den falschen befehl in diesem fall wissen die hier ![]() garantiert weiter; Antworten auch immer sehr flink... |
Re: Firebird und Tabelle löschen?
Zitat:
Also ich hab das Paket ZeosDBO 6.5.1-alpha CVS release as of 13/10/2005 compiliert. Daras hab ich eine ZConnection1, ZSQLMonitor1 und ZQuery1. Dann noch ein paar Buttons zum testen. Anlegen und Droppen geht ja, wie gesagt. Hier mal der Button mit der Funktion:
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
begin with ZQuery1 do begin SQL.Clear; SQL.Add('RECREATE TABLE main ('+ 'BOOKNO CHAR(6), '+ 'TITLE CHAR(50) COLLATE ISO8859_1, '+ 'EUROPUB CHAR(50) CHARACTER SET ISO8859_1 COLLATE FR_FR);'); ExecSql; end; end; Zitat:
|
Re: Firebird und Tabelle löschen?
Hallo,
hab es gerade einmal mit IBExpert Vers. 2005.12.04 und dem FB Server 1.0.3 versucht. Da funktioniert RECREATE ohne Probleme. :gruebel: |
Re: Firebird und Tabelle löschen?
Ich brauch das ganze Embedded.
|
Re: Firebird und Tabelle löschen?
Moin zusammen, und wieder eine Zeos-Exkursion
Also Zeos hat definitiv einen SQL-Parser, der für die internen Update-Statements den SQL-Befehl zerlegt und neu zusammensetzt. Habe da Erfahrungen mit eigenen UDF´s die Zeos nicht durchlies. Irgendwann habe ich diese dann im Quellcode der Zeos-Kompnenten hinzufügen müssen. Auch für neue Befehlswörter muß es eine Möglichkeit geben, diese zuzufügen, aber ich bin leider kein Zeos-Spezialist. Grüße in die DB-Runde // Martin PS: Ob-Server oder Embedded ist dabei übrigens egal. |
Re: Firebird und Tabelle löschen?
Klingt nicht sehr berauschend. Zum schluss lande ich bei DBase Dateien...
|
Re: Firebird und Tabelle löschen?
Zitat:
|
Re: Firebird und Tabelle löschen?
Zeos ist schon eine feine Sache, wenn man mit verschiedenen DBMS in Kombination arbeitet: Umschalten und fertig.
Was das Befehlswort-Problem angeht hilft vielleicht eine Anfrage bei ![]() ![]() Grüße // Martin PS: Marabu kennt sich eigentlich auch sehr gut mit Zeos aus, aber diese innereien sind doch sehr speziell.. |
Re: Firebird und Tabelle löschen?
Hallo hronny,
versuch doch einmal IBX (bei Delphi dabei) oder FibPlus (kostenpflichtig). Sind beide recht gut. |
Re: Firebird und Tabelle löschen?
Zitat:
![]() |
Re: Firebird und Tabelle löschen?
FIBPlus hab ich mal geladen mit Beispielen, überall sind gute Beispiele dabei. Problem: Ich finde nirgends die Info wie man on-the-fly eine Datenbank erzeugt und die füllt. Für diese Frage sollte ich vielleicht einen neuen Thread öffnen.
|
Re: Firebird und Tabelle löschen?
Gehts mal wieder darum, statt einer leeren Datenbank, diese vor Ort zu ertstellen und die User zu quälen, sie anzulegen oder was ? :mrgreen: IBExpert kann man schon leicht übergehen und sich eben die Arbeit selber machen :
![]() |
Re: Firebird und Tabelle löschen?
Hallo!
Versuchs mal so:
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
begin with ZQuery1 do begin SQL.Clear; SQL.Add('EXECUTE STATEMENT ('''); SQL.Add('RECREATE TABLE main ('+ 'BOOKNO CHAR(6), '+ 'TITLE CHAR(50) COLLATE ISO8859_1, '+ 'EUROPUB CHAR(50) CHARACTER SET ISO8859_1 COLLATE FR_FR);'); SQL.Add(''')'); ExecSql; end; end; Hope it helps onlinekater @MrSpock: IBX sind in Verbindung mit Firebird nicht zu empfehlen, Borland selbst sagt ganz klar, daß künftige Firebird-Features nicht unterstützt werden. |
Re: Firebird und Tabelle löschen?
Zitat:
Ich selbst verwende seit Jahren IBObjects. Ist ein bischen gewöhnungsbedürftig. Ich habe aber noch nichts gefunden, was man damit nicht machen konnte. Gruß Peter |
Re: Firebird und Tabelle löschen?
@hanspeter: Ich verwende auch schon seit Jahren die IBOs und kann Sie ebenso empfehlen.
Zitat:
Gruß onlinekater |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:32 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