Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Firebird und Tabelle löschen? (https://www.delphipraxis.net/70827-firebird-und-tabelle-loeschen.html)

hronny 5. Jun 2006 15:12

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:
DROP TABLE IF EXISTS tabelle;
CREATE TABLE tabelle (...)
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.

sancho1980 5. Jun 2006 15:27

Re: Firebird und Tabelle löschen?
 
kann man den fehler nicht irgendwie abfangen?

Jelly 5. Jun 2006 15:31

Re: Firebird und Tabelle löschen?
 
Mittels

SQL-Code:
select rdb$relation_name from rdb$relations where not (rdb$relation_name like 'RDB$%')
kriegst du eine Liste deiner Tabellen in deiner Datenbank. Vielleicht kannst Du damit was anfangen.

Nachtrag:
Besser noch so:
SQL-Code:
if exists (select 1 from RDB$RELATIONS where RDB$RELATION_NAME='DeineTabelle')
then
drop table DeineTabelle;

hronny 5. Jun 2006 16:13

Re: Firebird und Tabelle löschen?
 
Nehmen wir mal an meine Tabelle heißt >main<. Dann sieht mein Code so aus:
Delphi-Quellcode:
SQL.Add('if exists (select 1 from RDB$RELATIONS where RDB$RELATION_NAME=''main'') ');
SQL.Add('then ');
SQL.Add('drop table main;');
da gibt es ein >Invalid token<

marabu 5. Jun 2006 17:04

Re: Firebird und Tabelle löschen?
 
Hi folks.

Anstelle von IF ... DROP TABLE ... CREATE TABLE (...) könntet ihr es auch so machen:

SQL-Code:
RECREATE TABLE test (...)
Das DDL Statement RECREATE ist das Firebird Äquivalent zu dem MYSQL-Code aus Beitrag #1.

Grüße vom marabu

hronny 5. Jun 2006 17:08

Re: Firebird und Tabelle löschen?
 
mmh, naja das hier funktioniert Problemlos;
Delphi-Quellcode:
SQL.Add('CREATE TABLE main ('+
  'BOOKNO CHAR(6), '+
  'TITLE CHAR(50) COLLATE ISO8859_1, '+
  'EUROPUB CHAR(50) CHARACTER SET ISO8859_1 COLLATE FR_FR);');
hingegen das mit einer Fehlermeldung; Token unknown - line 1, char 0 RECREATE
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);');

marabu 5. Jun 2006 17:19

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

MrSpock 5. Jun 2006 17:28

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?

marabu 5. Jun 2006 17:43

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

hronny 5. Jun 2006 17:53

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: Download


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:13 Uhr.
Seite 1 von 3  1 23      

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