Delphi-PRAXiS

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

Jelly 5. Jun 2006 17:55

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?

sancho1980 5. Jun 2006 17:59

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 Firebird-Support-Forum
garantiert weiter; Antworten auch immer sehr flink...

hronny 5. Jun 2006 18:05

Re: Firebird und Tabelle löschen?
 
Zitat:

Zitat von Jelly
Mal ganz blöd gefragt...

Nix da, die blöden Fragen stell ich :D

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:

Zitat von sancho1980
hast du schon mal versucht, den befehl direkt aus isql abzufeuern?
kommt da der fehler auch?

Ich bin zu verwöhnt mit MySQL und PostgreSQL mit PHP. Aber wie mach ich das mit Delphi?

MrSpock 5. Jun 2006 18:26

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:

hronny 5. Jun 2006 18:27

Re: Firebird und Tabelle löschen?
 
Ich brauch das ganze Embedded.

mschaefer 5. Jun 2006 18:30

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.

hronny 5. Jun 2006 18:58

Re: Firebird und Tabelle löschen?
 
Klingt nicht sehr berauschend. Zum schluss lande ich bei DBase Dateien...

Jelly 5. Jun 2006 19:19

Re: Firebird und Tabelle löschen?
 
Zitat:

Zitat von hronny
Klingt nicht sehr berauschend. Zum schluss lande ich bei DBase Dateien...

Die Aussage versteh ich nicht. Nur weil Zeos mit den Befehlen nicht klar kommt, musst Du doch nicht das DBMS wechseln. Es gibt ja auch noch Alternativen zu Zeos.

mschaefer 5. Jun 2006 19:34

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 DomoSokrat, denn da haben wir ja unseren ersten Zeos-Profi und im ZeosForum, (natürlich mit Rückmeldung in die DP) könnte man sich auch erkundigen. Zeos macht viel möglich, aber man muß schonmal etwas mehr fragen.

Grüße // Martin

PS: Marabu kennt sich eigentlich auch sehr gut mit Zeos aus, aber diese innereien sind doch sehr speziell..

MrSpock 5. Jun 2006 19:37

Re: Firebird und Tabelle löschen?
 
Hallo hronny,

versuch doch einmal IBX (bei Delphi dabei) oder FibPlus (kostenpflichtig). Sind beide recht gut.

Jelly 5. Jun 2006 19:47

Re: Firebird und Tabelle löschen?
 
Zitat:

Zitat von MrSpock
versuch doch einmal IBX (bei Delphi dabei) oder FibPlus (kostenpflichtig). Sind beide recht gut.

Oder die neu erschienenen IBDAC Komponenten von Corelab, kosten aber auch was... Hab mir die geholt und bin eigentlich sehr zufrieden, wobei ich allerdings noch keine grossen Sachen mit gemacht habe.

hronny 5. Jun 2006 20:41

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.

Hansa 6. Jun 2006 00:44

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 :

http://www.atstariff.com/fibscript/en/

TBx 6. Jun 2006 07:51

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.

hanspeter 6. Jun 2006 08:55

Re: Firebird und Tabelle löschen?
 
Zitat:

@MrSpock: IBX sind in Verbindung mit Firebird nicht zu empfehlen, Borland selbst sagt ganz klar, daß künftige Firebird-Features nicht unterstützt werden.
Borland selbst sagt aber auch ganz klar, das es Delphi und alle IDE's nicht mehr unterstützen wird.

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

TBx 6. Jun 2006 09:10

Re: Firebird und Tabelle löschen?
 
@hanspeter: Ich verwende auch schon seit Jahren die IBOs und kann Sie ebenso empfehlen.
Zitat:

Borland selbst sagt aber auch ganz klar, das es Delphi und alle IDE's nicht mehr unterstützen wird.
Es besteht wohl doch noch ein Unterschied, ob sich eine Firma von einer Produktsparte trennt oder ob diese Firma angibt, eines Ihrer Produkte wird besteimmte Produkte von Drittherstellern nicht vollständig unterstützen.

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