Wie Tabellenbaum kopieren?
-
Hi,
gegeben seien 4 Tabellen:
Basis ID Wert 1 2 2 4 3 6 Stufe_1 ID_Basis ID Wert_1 1 1 3 1 2 9 1 3 27 Sufe_2 ID_Basis ID_Stufe_1 ID Wert_2 1 1 1 1 1 1 4 2 und Stufe_3 ID_Basis ID_Stufe_1 ID_Stufe_2 ID Wert 1 1 1 1 1 1 1 1 2 2 1 1 4 3 3 1 1 4 4 4
Dabei ist ID jeweils ein Autowert.
Gibt es eine Möglichkeit mit MS-Jet-SQL, diesen gesamten Baum der an Basis Satz 1 angehängt ist durch einen oder warscheinlicher mehrere SQL-Befehle an Basis Satz 2 dranzukopieren ohne sich durch alle Stufen und alle einzelnen Datensätze durchhangeln zu müssen. Bei Stufe 1 geht das ja noch, aber schon bei Stufe 2 wirds komplizierter, da ja dann jeweils die unter-IDs mit erfasst werden müssen.
Auf der ersten Stufe habe ich das so realisieren können:
insert into Stufe_1 ( ID_Basis, Wert_1 ) select 2, Wert_1 from Stufe_1 where id_basis = ( select Max( ID_Basis ) from Stufe_1 );
Nur für den Rest weiß ich da nicht weiter. Währe schön, wenn da jemand eine Lösung hätte.
Danke und Gruß Mümmel
-
warum werden die anderen Stufen überhaupt jedes mal mitgezogen?
id_stufe_2 reicht ja schon, um id_stufe_1 und id_basis eindeutig festzulegen.
würde das ganze dann doch deutlich vereinfachen
-
Sieht so aus als ob du beim Insert "Stufe_1.ID" über Auto-Inkrement erzeugen lässt. Das wird dann etwas kompliziert, weil du die Verbindung zwischen den originalen "Stufe_1.ID" Werten und den neu eingefügten herstellen müsstest.
Einfacher würde es wenn du die "Stufe_1.ID" Werte mitkopieren könntest.
Sonst müsstest du irgendwie ein explizites Mapping zwischen den alten und den neuen Werten machen. Und das geht nur wenn die übrigbleibenden Spalten in "Stufe_1" ausreichen um Zeilen "unique" zu machen. Was vermutlich nicht der Fall sein wird, da man ja vermutlich zwei Zeilen mit dem selben "Wert" eintragen kann?
Sonst könntest du noch die neuen IDs mit Hand vergeben.
Also z.B. erstmal einen Offset ermitteln den du auf die alten IDs draufaddieren musst, so dass der niedrigste Wert "AlteID + Offset" grösser ist als die höchste aktuelle ID.
Dann hast du dein explizites Mapping, und kannst die gewünschte Zuordnung herstellen.Und das natürlich für jede Ebene.
Vermutlich wäre es aber die Zeit wert sich nochmal hinzusetzen und das Datenmodell zu überdenken.
-
Hi Zwurz und Hustbaer,
schön, das ihr Euch darüber Gedanken macht.
hier noch mal die Dateistruktur:
Basis ID Autowert Wert Integer Stufe_1 ID_Basis Long Integer ID Autowert Wert_1 Integer Sufe_2 ID_Basis Long Integer ID_Stufe_1 Long Integer ID Autowert Wert_2 Integer und Stufe_3 ID_Basis Long Integer ID_Stufe_1 Long Integer ID_Stufe_2 Long Integer ID Autowert Wert Integer
Die jeweiligen IDs der niederen Stufen werden nur durchgeschleift, um
1. Auswertungen zu vereinfachen bei denen über größere Bereiche gruppiert oder gefiltert werden soll, um nicht immer eine View zu benötigen.
2. Bei der Bearbeitung in Access dem der Werte eingeben will unmittelbar zu zeigen wo er ist.
3. Bei Bearbeitung in einem Programm zu vermeiden, das ADODataSet Probleme beim Speichern hat, weil die Daten aus verschiedenen Tabellen kommen.
Wert ist hier nur ein Synonym für die jeweils wirklich dahinter stehenden Felder.Das Problem beim Kopieren besteht darin, dass die IDs der niederen Stufen in den höheren Stufen nicht einfach kopiert werden können, sonst zeigen sie ja anschließend auf einen falschen Zweig. Es müssen also jeweils die zu dem jeweils neuen Unterzeig gehörenden IDs eingetragen werden.
Theoretisch könnte man erst mal Nullen eintragen und das ganze dann mit einer View füllen, was mir aber nicht übermäßig sauber vorkommt.Gruß Mümmel
-
Hi Zwurz,
zwutz schrieb:
warum werden die anderen Stufen überhaupt jedes mal mitgezogen?
id_stufe_2 reicht ja schon, um id_stufe_1 und id_basis eindeutig festzulegen.
würde das ganze dann doch deutlich vereinfachen
Werd wohl doch zu Deiner Lösung greifen. Ist irgendwie im Händeln einfacher, auch wenn das Kopieren ganzer Bäume auch da nicht ganz einfach wird.
Gruß Mümmel