Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Flocko am Juli 28, 2016, 08:22:01

Titel: Loop zum leeren von Tabellen
Beitrag von: Flocko am Juli 28, 2016, 08:22:01
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
Titel: Re: Loop zum leeren von Tabellen
Beitrag von: el_gomero am Juli 28, 2016, 08:32:36
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.
Titel: Re: Loop zum leeren von Tabellen
Beitrag von: ebs17 am Juli 28, 2016, 09:00:34
Referentielle Integrität gibt es bei Dir wohl nicht?

Bezügliche alle Tabellen: Systemtabellen sollte man in jedem Fall ausnehmen.
Titel: Re: Loop zum leeren von Tabellen
Beitrag von: Flocko am Juli 28, 2016, 09:45:56
Vielen Dank für den Hinweis ebs17, aber eine Lösung würde mir mehr helfen...  ;D
Titel: Re: Loop zum leeren von Tabellen
Beitrag von: ebs17 am Juli 28, 2016, 10:15:14
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).
Titel: Re: Loop zum leeren von Tabellen
Beitrag von: Beaker s.a. am Juli 28, 2016, 10:52:24
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
Titel: Re: Loop zum leeren von Tabellen
Beitrag von: ebs17 am Juli 28, 2016, 10:56:44
@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.
Titel: Re: Loop zum leeren von Tabellen
Beitrag von: Beaker s.a. am Juli 28, 2016, 13:49:58
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
Titel: Re: Loop zum leeren von Tabellen
Beitrag von: MzKlMu am Juli 28, 2016, 14:03:09
Hallo,
wenn RI eingestellt ist mit Löschweitergabe muss man nur die 1-Tabellen löschen. Die anderen leeren sich von alleine.
Titel: Re: Loop zum leeren von Tabellen
Beitrag von: el_gomero am Juli 28, 2016, 14:11:29
@ 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 ...
Titel: Re: Loop zum leeren von Tabellen
Beitrag von: Beaker s.a. am Juli 28, 2016, 14:19:54
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
Titel: Re: Loop zum leeren von Tabellen
Beitrag von: ebs17 am Juli 28, 2016, 14:55:17
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.
Titel: Re: Loop zum leeren von Tabellen
Beitrag von: Beaker s.a. am Juli 28, 2016, 15:14:04
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
Titel: Re: Loop zum leeren von Tabellen
Beitrag von: MzKlMu am Juli 28, 2016, 15:18:36
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.
Titel: Re: Loop zum leeren von Tabellen
Beitrag von: Beaker s.a. am Juli 28, 2016, 15:23:01
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.