Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Loop zum leeren von Tabellen

Begonnen von Flocko, Juli 28, 2016, 08:22:01

⏪ vorheriges - nächstes ⏩

Flocko

Hallo zusammen,

da ich regelmäßig neue Daten in meine Datenbank importieren muss, suche ich eine Möglichkeit alle Tabellen in meiner DB zu leeren. Eine mögliche Lösung ist natürlich für jede Tabelle
    CurrentDb.Execute "DELETE FROM Tabelle", dbFailOnError
anzuwenden. Hat jemand eine Idee wie man dieses Problem mit einem Loop lösen könnte, sodass alle Tabellen unabhängig von der Benennung geleert werden?

Vielen Dank

el_gomero

Guten morgen,

du könntest die TableDefs-Collection verwenden und alle relevanten Tabellen löschen, wenn aber ohnehin immer alles geleert wird, würde ich eine Kopie der db mit den leeren Tabellen erstellen und diese (als neue Kopie) verwenden.
Gruß
Jürgen


Hilfe nach bestem Wissen, ohne Anspruch auf Richtigkeit und Vollständigkeit.
*feedback erwünscht*
Bitte Tipps lesen

ebs17

Referentielle Integrität gibt es bei Dir wohl nicht?

Bezügliche alle Tabellen: Systemtabellen sollte man in jedem Fall ausnehmen.
Mit freundlichem Glück Auf!

Eberhard

Flocko

Vielen Dank für den Hinweis ebs17, aber eine Lösung würde mir mehr helfen...  ;D

ebs17

Zitateine Lösung würde mir mehr helfen...
Kannst Du Dir vorstellen, dass manche dann an eine Lösung gehen, nachdem sie die Ausgangssituation kennen?
Schüsse in den Nebel sind nicht jedermanns Sache.

Sowie: Der Vorschlag von el_gomero wäre eine einfache und optimale Lösung. Halte ein Backend mit den benötigten aber leeren Tabellen als Vorlage bereit. Dort könnten dann auch schon die für eine richtige Datenbankarbeit hilfreichen Beziehungen, Indizes, Gültigkeitsregeln usw. vorhanden sein.

Bei Neuimport nimmt man eine Kopie der Vorlage, füllt die Tabellen und verknüpft sie in die eigene Verarbeitung (Frontend). Das alte Backend mit den Vorgängerdaten wird vorher entfernt (Löschen, Archivieren).
Mit freundlichem Glück Auf!

Eberhard

Beaker s.a.

Hallo Flocko,
Dim dbe As DAO.Database
Dim tdf As DAO.TableDef
For Each tdf In dbe.TableDefs
    If Mid(tdf.Name, 1, 4) <> "MSys" Then
        dbe.Execute "DELETE FROM " & tdf.Name
    End If
Next
(Luftcode)
Sollte sein, was du suchst.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

ebs17

@ekkehard: Bei eingestellter RI wäre es aber ein großer Zufall, wenn die Reihenfolge der Auflistung die benötigte Reihenfolge ist.

Mancher springt vom 10-Meter-Turm, ohne sich zu vergewissern, ob Wasser im Becken ist.
Mit freundlichem Glück Auf!

Eberhard

Beaker s.a.

Hallo Eberhard,
Tja, daran habe ich natürlich nicht gedacht, Aua.
Kann man aber auch in den Griff bekommen, Relations lassen sich ja
auch löschen. Und auch anschliessend wieder herstellen, wenn man sie in
geeigneter Form zwischenspeichert.
Ich habe das schon mal gemacht, finde es aber nicht mehr wieder. Könnte
es mir jetzt aber auch nicht so ad hoc aus den Fingern saugen.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

MzKlMu

Hallo,
wenn RI eingestellt ist mit Löschweitergabe muss man nur die 1-Tabellen löschen. Die anderen leeren sich von alleine.
Gruß Klaus

el_gomero

@ Ekkehard

zu deiner Antwort #5  - könnte auch auf Fehler laufen, da oft auch irgendwelche temporären Tabellen da sind. Wenn zB konsequent die ungarische Notation verwendet wird würde


Dim dbe As DAO.Database
Dim tdf As DAO.TableDef
For Each tdf In dbe.TableDefs
    If Mid(tdf.Name, 1, 4) Like "Tbl*" Then
        dbe.Execute "DELETE FROM " & tdf.Name
    End If
Next


helfen ... dahingehende Fragen sind aber unbeantwortet geblieben ...
Gruß
Jürgen


Hilfe nach bestem Wissen, ohne Anspruch auf Richtigkeit und Vollständigkeit.
*feedback erwünscht*
Bitte Tipps lesen

Beaker s.a.

Hallo
@Jürgen,
Auf nähere Bestimmung der zu leerenden Tabellen bin ich natürlich nicht
eingegangen, das muss der TS schon selber wissen. Das geschriebene ist
ja auch nur ein Standard um alle Tabellen ohne die Systemtabellen zu
durchlaufen.
Vielleicht sind es ja auch nur ein paar Tabellen, und er schreibt die
Namen vorher in ein Array oder sonstwas.

@Klaus
Stimmt natürlich auch. Aber kann man das voraussetzen?

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

ebs17

ZitatAber kann man das voraussetzen?

Da der TE nicht darauf eingeht, sondern nur eine Lösung will, wird er wohl keine Ahnung haben, was das ist.
Nichtsdestrotrotz könnte es ihm begegnen, wenn da jemand anders schon mal eine Vorarbeit geleistet hat.

Immerhin wäre beim Einfügen bei eingestellter RI die Reihenfolge der Tabellen dann auch nicht egal.
Mit freundlichem Glück Auf!

Eberhard

Beaker s.a.

Hallo Eberhard,
ZitatImmerhin wäre beim Einfügen bei eingestellter RI die Reihenfolge der Tabellen dann auch nicht egal.
Das verstehe ich jetzt nicht.
Es muss ja "von unten nach oben" (n -> 1) geleert werden.
Das ist ohne RI mit dem Code nicht gesichert, klar.
Mit RI dürfte es aber doch keine Rolle spielen. Wenn die Schleife zuerst
auf eine n-Tabelle trifft müsste diese doch ohne Mucken geleert werden
können, entspricht ja der Regel. Und wenn die Schleife auf eine 1-Tabelle
stößt, regelt die RI das Leeren der n-Tabelle(n) intern.
Wo ist denn da mein Denkfehler?

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

MzKlMu

Hallo,
der Hinweis von Ebs bezog sich auf das Einfügen von Daten, und muss dann auch erst die 1-Seite da sein. Und dann können erst Daten der n-Seite angefügt werden. Und das geht nichts automatisch wie beim Löschen.
Gruß Klaus

Beaker s.a.

Ja, ja, wer lesen kann...
Ich nenn' das immer "gefilterte Wahrnehmung". Ging die ganze Zeit um
das Leeren von Tabellen, das verschleierte den neuen Aspekt.
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)