Seite 1 von 1

Tables Liste leeren

Verfasst: Fr, 27. Mär 2015 15:11
von Manfred
kann man die in einem Rutsch leeren, oder muß man jede DBF (mühsam) einzeln entfernen?

Re: Tables Liste leeren

Verfasst: Fr, 27. Mär 2015 15:33
von Jan
Nachdem ich mich da auch lange mit mit rumgeärgert habe ist der für mich schnellste Weg: DD löschen, die drei DD-Dateien löschen, und alles neu aufbauen.

Jan

Re: Tables Liste leeren

Verfasst: Mo, 30. Mär 2015 13:11
von nightcrawler

Code: Alles auswählen


declare @tables cursor as select name from system.tables;
open @tables;
while fetch @tables do
  try 
    execute immediate 'drop table ['+trim(@tables.name)+']';
end while;
close @tables;


Re: Tables Liste leeren

Verfasst: Mo, 30. Mär 2015 13:17
von Manfred
Hi Joachim,

Es ging mir nur darum, ob es die Möglichkeit im ARC gibt mehrere DBF zu kennzeichnen und dann alle auf einmal zu entfernen. So mal eben schnell.

Re: Tables Liste leeren

Verfasst: Mi, 01. Apr 2015 12:49
von nightcrawler
Manfred hat geschrieben:Hi Joachim,

Es ging mir nur darum, ob es die Möglichkeit im ARC gibt mehrere DBF zu kennzeichnen und dann alle auf einmal zu entfernen. So mal eben schnell.
Leider nicht - und ich habe auch nicht mehr den gesamten Quellcode und eine entsprechend eingerichtete Delphi-Version, dass ich es schnell nachrüsten könnte.

Re: Tables Liste leeren

Verfasst: Fr, 18. Mär 2016 9:19
von Manfred
derzeit ist mir das Problem gerade wieder auf den Tisch gekommen. Also habe ich mal Deinen CODE Vorschlag ausprobiert. Oder zumindest dachte ich ihn auszuprobieren. Ich vermute einmal, ich muß es im ARC unter Functions eingeben!? Dort gibt es aber Fehlermeldungen damit. Bin ich überhaupt auf dem richtigen Weg?

Re: Tables Liste leeren

Verfasst: Fr, 18. Mär 2016 9:53
von UliTs
Manfred,

ich vermute, Du hast ein Data Dictionary? Dann kannst Du darin eine Funktion schreiben, die Tabellen daraus löscht.
Zeig mal den Code wie Du die Funktion versucht hast zu schreiben.

Uli

Re: Tables Liste leeren

Verfasst: Fr, 18. Mär 2016 9:57
von Manfred
delalldbf.JPG
delalldbf.JPG (53.04 KiB) 10891 mal betrachtet
ist das so richtig?
Sobald ich OK oder Debug/test drücke kommt das hier
delalldbf_error.JPG
delalldbf_error.JPG (68.27 KiB) 10891 mal betrachtet

Re: Tables Liste leeren

Verfasst: Fr, 18. Mär 2016 16:08
von UliTs
Du machst ein "try", aber es fehlt das "end try" :D .

Versuch mal

Code: Alles auswählen

...
try execute ...; catch all end try;
...
Klappt es dann?

Uli

Re: Tables Liste leeren

Verfasst: Fr, 18. Mär 2016 16:12
von Manfred
hm,

ich habe nur das gemacht, was Joachim geschrieben hat. Aber zumindest gibt es mit Deinem Vorschlag keine Fehlermeldung mehr. Allerdings habe ich keine Ahnung, wie ich das Teil jetzt lostreten kann, das es die Tables entfernt?

Re: Tables Liste leeren

Verfasst: Fr, 18. Mär 2016 16:19
von UliTs
Du kannst es ja mal aufrufen :-) .
Z.B. durch

Code: Alles auswählen

select DelAlleDbf() Ergebnis from system.dictionary
Edit: datadictionary -> dictionary

Re: Tables Liste leeren

Verfasst: Fr, 18. Mär 2016 16:20
von UliTs
Manfred hat geschrieben:...
ich habe nur das gemacht, was Joachim geschrieben hat.
...
Ja, auch Genies können Fehler machen :D .

Re: Tables Liste leeren

Verfasst: Fr, 18. Mär 2016 16:35
von Manfred
genau so aufrufen, wie Du es geschrieben hast? Hm, das klappt nicht. Muß da nicht noch was angegeben werden?

Re: Tables Liste leeren

Verfasst: Fr, 18. Mär 2016 20:18
von UliTs
Manfred,

habe oben meinen Fehler korrigiert. So etwas darfst Du aber natürlich auch in der Hilfe nachschauen :wink: .

Re: Tables Liste leeren

Verfasst: Sa, 19. Mär 2016 7:43
von Manfred
MIst, das hat wohl doch geklappt, aber der Architekt macht keinen Refresh darauf. Als ich gerade neu startete, waren alle DBF weg. Manmanman, wieder auf das Teil reingefallen.

Re: Tables Liste leeren

Verfasst: Sa, 19. Mär 2016 10:05
von UliTs
Dafür gibt es den "Refresh"-Knopf :D .
Aber Du hast natürlich recht: so etwas könnte automatisch geschehen. In vielen solchen Kleinigkeiten hat der ARC so einige Fallen. Im Zweifel lohnt es sich immer, sich ab- und neu anzumelden.

Uli

Re: Tables Liste leeren

Verfasst: Sa, 19. Mär 2016 10:52
von Manfred
Hm, welchen Refreshknopf meinst Du? Wenn ich STRG-R oder F5 drücke, die allgemein gebräuchlichen Varianten, passiert da man gar nichts, bzw. öffnet sich ein anderes Fenster. Abmelden und anmelden hilft, kann aber nicht das große Glück bedeuten.

Re: Tables Liste leeren

Verfasst: Sa, 19. Mär 2016 10:58
von UliTs
Ich meinte den Refreshknopf im Browser, wenn eine Tabelle geöffnet ist. Aber in diesem Fall hast Du ja Tabellen aus dem DD gelöscht und das geht natürlich nicht bei einer geöffneten Tabelle. Da hilft nur DD schließen und neu öffnen 8) .

Aber über solche "Kleinigkeiten" darfst Du Dich nicht aufregen, sonst wirst Du nicht glücklich mit dem ARC (Data Architect).

Uli

Re: Tables Liste leeren

Verfasst: Sa, 19. Mär 2016 11:00
von Manfred
das stimmt, immer cool bleiben. Solange man genau weiß, was man macht und was es bringen soll geht es noch. Da ich aber noch Neuling auf dem Gebiet bin, verläßt man sich schonmal gerne auf das angezeigte Ergebnis. Ich werde mal versuchen in Zukunft daran zu denken, wenn es nicht so wird, wie erwartet einfach mal an und abmelden....

Re: Tables Liste leeren

Verfasst: So, 20. Mär 2016 19:25
von nightcrawler
Hallo Manfred,
ich würde sowas nicht in eine FUNCTION packen, sondern in eine STORED PROCEDURE. Führe folgendes in einem SQL Fenster aus, dann hast Du diese Stored Proc:

Code: Alles auswählen

CREATE PROCEDURE DeleteAllTables(tablename CICHAR(255) OUTPUT, success LOGICAL OUTPUT)
BEGIN
  declare @tables cursor as select name from system.tables;
  open @tables;
  while fetch @tables do
    try
      execute immediate 'drop table ['+trim(@tables.name)+']';
      INSERT INTO __output(tablename, success) VALUES(trim(@tables.name), True);
    catch all
      INSERT INTO __output(tablename, success) VALUES(trim(@tables.name), False);
    end try;
  end while;
  close @tables;
END;
Einmal erstellt kannst Du es dann immer über SQL ausführen:

Code: Alles auswählen

EXECUTE PROCEDURE DeleteAllTables();
In der Ergebnismenge stehen dann alle Tabellen des Dictionary und ob sie gelöscht werden konnten oder nicht.