Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: mschuhen am Mai 01, 2012, 21:46:27

Titel: Insert Into Anweisung
Beitrag von: mschuhen am Mai 01, 2012, 21:46:27
hallo,

ich habe folgendes Problem:
Ich habe eine Access Datenbank (A 2003) mit 3 Tabellen erstellt (Klienten, Ergänzung1,Ergänzung2). Die Tabellen sind m:n verknüpft.
Nun möchte ich von Zeit zu zeit Daten die aktuell nicht mehr benötigt werden in andere Tabellen (Ehemalige, Ergänzung3, Ergänzung4) auslagern.
Dies habe ich über eine Insert Into Anweisung mit InnerJoin ausprobiert. funktioniert aber leider nicht.

Insert Into "Ehemalige" Inner Join ("Ergänzung3" InnerJoin "Ergänzung4")
Select* From Klienten InnerJoin(Select* From Ergänzung1 innerJoin Select* From Ergänzung2)
Where "ID=" &Me!ID

Frage 1 : Könnte so ein Konstrukt überhaupt funktionieren?
Frage 2 : Wenn Nein, wie könnte ich das Problem lösen?

Danke für die Hilfe
Titel: Re: Insert Into Anweisung
Beitrag von: MzKlMu am Mai 01, 2012, 22:00:48
Hallo,
das Vorhaben is grundsätzlich fragwürdig. Man löscht keine Daten die gültig waren und verschieben erst recht nicht.
Wieso gibt es 2 Ergänzungsfelder (Ergänzung1 + 2 bzw. 3+4)?
Wäre es nicht sinnvoll nur ein solches Feld zu haben und die Ergänzungen einfach in jeweils einem neuen Datensatz zu erfassen, endlos immer fort bis zur Ergänzung 758 z.B. (=758. Datensatz) ?

Die 758 ist natürlich willkürlich und soll Dir nur zeigen, dass Du völlig auf dem Holzweg bist.
Titel: Re: Insert Into Anweisung
Beitrag von: Wurliwurm am Mai 02, 2012, 11:47:06
Zitat von: mschuhen am Mai 01, 2012, 21:46:27
Frage 1 : Könnte so ein Konstrukt überhaupt funktionieren?
Frage 2 : Wenn Nein, wie könnte ich das Problem lösen?

Mal abgesehen von der Frage, ob das Datenmodell unglücklich ist oder nicht, ist der SQL-Befehl falsch. Die Syntax von INSERT läßt keine Joins zu. Es geht nicht: "INSERT INTO Tab1 INNER JOIN Tab2".

Wenn Du so eine Art Archivierungsfunktionalität haben willst, dann wird das nicht mit einem SQL-Befehl gehen, sondern es sind mehrere Schritte notwendig

-Identifizieren der zu "archivierenden" Zeilen (pro Tabelle)
-Einfügen dieser Zeilen in die "Ablagetabellen"
-Löschen der Zeilen aus den "Produktivtabellen"

Grundsätzlich ist der richtige Weg, ein Problem in einzelne Teilprobleme zu zerlegen, bis diese einfach sind. Mehrere Einzel-Inserts sind dem SQL-Superspaghetti-Befehl vorzuziehen. Um Datenschiefstand zu vermeiden gibt es das Konzept der Transaktion, welches jeder unbedingt kennen sollte, der wie Du mit "Auslagern" von Daten arbeiten will.
Titel: Re: Insert Into Anweisung
Beitrag von: mschuhen am Mai 04, 2012, 07:55:50
hallo,

erstmal danke an die Leser. problem hat sich zwischenzeitlich gelöst. Es muss keine Archivierung stattfinden. ::) :-*