September 26, 2020, 19:17:23

Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!


Attribute innerhalb einer Tabelle kopieren

Begonnen von Frank70, September 02, 2020, 08:57:17

⏪ vorheriges - nächstes ⏩

Frank70

Hallo,

ich habe ein Problem, bei dem ich auf dem Schlauch stehe.
Wahrscheinlich ist die Lösung recht einfach, denke ich..... ich komme nur nicht drauf.

Ich habe eine DB in der die Arbeitsschritte eines Projektes "abgehakt" werden können.

Dafür gibt es 2 Tabellen

- Projekte
- Arbeitsschritte

die beiden Tabellen sind über eine ID verknüpft. In der Tabelle Arbeitsschritte gibt es ca. 40 Datensätze (Arbeitsschritte) pro Projekt.

Jetzt möchte ich für 40 Projekte die Datensätze eines Projektes kopieren.

Wie bekomme ich das hin ?

Gruß Frank

ebs17

Auf verschiedenen Wegen ...

Mein Weg wären zwei Anfügeabfragen:
1) Ausgewählte Projekte mit neuem Namen (da sollte man eine Vorstellung haben wie eine Zuordnung ProjektnameAlt zu ProjektnameNeu) in Projekttabelle. Es ergeben sich neue Primärschlüssel.

2) Basierend auf der genannten Zuordnung kann man die abhängigen Arbeitsschritte mit neuem Fremdschlüssel duplizieren.
Mit freundlichem Glück Auf!

Eberhard

Frank70

Hallo Eberhard,

Plan 2 könnte ich mir vorstellen, aber dann müsste ich die bestehenden Datensätze löschen. Sollte kein Problem sein.
Aber wie kopiere ich dann die Datensätze und vergebe die entsprechenden ProjektID ?

ProjektID        Fremd_ID
Arbeitsschritt   Text
Aerledigt        Datum       (soll kopiert werden aus Projekt 237 in Projekt 250,251,.....290)

Gruß Frank

ebs17

Zitataus Projekt 237 in Projekt 250,251,.....290
O.K., es ist nur ein zu kopierendes Projekt, das man kennt. Da wird es doch nur einfacher.
Wie käme man auf 250?

Fortlaufend hochzählen könnte man über eine Hilfstabelle: Daten vervielfältigen mit Zahlen-Hilfstabelle
Mit freundlichem Glück Auf!

Eberhard

crystal

Hallo Frank,
möchte auch meinen bescheidenen Senf dazugeben, da die Antworten von "Kumpel" ebs17 leider nur wenig konkret unnd/oder problembezogen sind.

Also:
Du möchtest einen "Ast" kopieren, also einen Haupt-Datensatz mit angehängten Kind-Datensätzen. Solche "Äste" sind normalerweise über einen Hauptschlüssel der Haupttabelle verknüpft, indem dessen Wert als Fremdschlüssel/Referenz in alle betreffenden Kind-Datensätze eingetragen wird. Soweit - so gut.

Wenn du einen solchen "Ast" kopieren möchtest, musst du zunächst die "Ast-Wurzel" kopieren, ohne weitere "Zweige" oder "Kinder". Dadurch erhälst du einen neuen Hauptschlüssel, der dann als Referenz in die (40) zu kopierenden "Kinder" eingetragen werden muss.

Die große Frage ist jetzt:
1. willst du das einmalig oder sehr selten machen oder
2. durchaus regelmäßig?

Wenn 1. zutrifft:
Vorbemerkung: dieses ist eine SEHR primitive Lösung, die aber ohne Programmierung auskommt.
----------------------------------------------------------
1. Kopiere den Haupt-Datensatz. Das geht auch in der Tabellen-Ansicht (rechte Maustaste ->Kopieren, dann ->Einfügen und ggf. gewisse Daten in der Kopie abändern).
2. Somit erhälst du für die Kopie einen neuen Primärschlüssel (merken!).
3. Exportiere nun alle (40) Kind-Datensätze des alten "Astes" nach Excel.
4. Öffne die Excel-Tabelle und ändere die Referenzen auf den Haupt-Datensatz (gemerkter neuer Schlüssel).
5. Ändere in der Excel-Tabelle ggf. auch andere Daten ("Erledigt" = Nein, Datum, Benutzer...).
6. Importiere die geänderten Daten der Excel-Tabelle in deine "Kind-Tabelle".
7. Sofern die "Kind-Tabelle" über einen Autowert als Haupt-Schlüssel verfügt, sollte das so ungefähr funktionieren.
8. Du musst hier mit Sicherheit experimentieren und probieren, bis zum Erfolg.

Falls 2. zutrifft:
Hier kommst du um etwas Programmierung wohl nicht herum, da es meines Wissens nach in Access keine Möglichkeit gibt, komplette "Äste" automatisch zu kopieren...
Dabei müsstest du etwa so vorgehen:
1. Referenz-Haupt-Datensatz auswählen.
2. Daten in Recordset (ADO) einlesen und mit add duplizieren
3. Hauptschlüssel des neuen DS lesen und merken
3a. Danach diesen Recordset wieder schließen
4. Neuer Recordset: "Kinder" des zu kopierenden Haupt-Datensatzes einlesen und im Loop für alle Records
4a. die Referenz auf den Haupt-Datensatz anpassen (gemerkter Wert) sowie
4b. bestimmte Felder neu besetzen (Erledigt= Nein, etc.).
4c. Kind-Datensatz mit add bzw. addnew schreiben
5. Recordset schließen

Das alles könnte man in einem speziellen Formular unterbringen:
1. Altes Projekt auswählen (z. B. mit Kombobox)
1a. ein paar Projektdaten darstellen und ggf.
1b. neue Projekt-Daten eingeben
2. Projekt kopieren (Button "Jetzt kopieren")
3. Standard-/Default-Werte für "Schritte" darstellen
4. ggf. ein paar Daten für die "Schritte" eintragen (ungebundene Felder)
5. Button "Schritte kopieren", dabei
5a. den neuen (gemerkten) Hauptschlüssel und
5a. die Daten aus den o. g. ungebundenen Feldern übernehmen.
6. Neue/geändete Daten speichern
6. Anzeige: "Projekt würde erfolgreich kopiert".


Ein solches spezielles Formular würde es dir ermöglichen, in der DB zu suchen (z. B. nach höchster vergebener Projektnummer) und Situations-abhängig reagieren zu können. das Formular könnte eben als "Kommando-Zentrale" fungieren und dem Anwender diverse Funktionen anbieten (Suche nach alten Projekten, Eingabe von Werten für das neue Projekt, Defaults für gewisse Felder usw.)

Das alles ist natürlich nicht am konkreten Beispiel geprüft und getestet und soll dir auch nur eine etwas genauere Hilfestellung sein, damit du etwas überlegen kannst. Jedenfalls würdest du ohne eine "Hilfstabelle" auskommen, die dein Vorhaben nur unnötig komplizieren würde.

Ich gebe gerne meinen "Senf" etwas ausführlicher zur Diskussion, als nur zu schreiben "ja, das könnte man so oder so machen" und dann einigermaßen konkrete Lösungen schuldig zu bleiben.

Grüße
crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

ebs17

September 06, 2020, 15:55:11 #5 Letzte Bearbeitung: September 07, 2020, 09:31:06 von ebs17
ZitatAntworten von "Kumpel" ebs17 leider nur wenig konkret unnd/oder problembezogen
Das kann jetzt am Beispiel nur jemand behaupten, der nicht wirklich ein Verständnis zu Macht, Umfang und Performance von Abfragen hat.

Etwas hin- und herkopieren, Schleifen drehen und alles einzeln anfassen (Sandschaufel statt Bagger) ist dann ein Weg, der dann für die allermeisten eher intellektuell greifbar ist. Muss aber nicht zwingend einfacher und fehlerunanfälliger und schon gar nicht schneller sein.

(Eine persönliche Bewertung gebe ich doch gerne mal zurück.)

Eine konkrete Lösung (immer noch genau eine Anfügeabfrage pro Zieltabelle) macht selbstredend erst nach einer konkreten Aufgabenstellung Sinn (=> Rückfrage!).
Man könnte sich natürlich seine überschüssige Zeit auch vertreiben, indem man nach jedem Hüsteln neu eine Datenbank mit Lösungen baut - gerade dann, wenn das eigene Interesse merklich höher liegt als das des Themenstarters.
Mit freundlichem Glück Auf!

Eberhard

crystal

@ebs17

Es juckt mich ja schon etwas in den Fingern, auf deinen "Post" zu antworten.
Aber - ich lasse es sein, denn es ist sinnlos, auf solche Polemik zu antworten, wenn der Adressat unwillig ist. Naja, ganz kann ich es mir doch nicht verkneifen.

Ich würde gern ein paar konkrete Hinweise von dir sehen, z. B. Code-Beispiele oder (kurze) Beschreibungen - aber du beschränkst dich leider all zu oft auf "Allgemein-Hinweise".

Dieses Forum soll doch dazu dienen, Fragenden möglichst einfach und konkret, evtl. mit Beispielen, zu HELFEN - und nicht irgendwelche "Allgemein-Informationen" zum "Besten" zu geben. Wenn du das nicht kannst - oder willst - solltest du verzichten.

Aus meiner persönlichen Sicht sind deine Beiträge in diesem Forum eher selten konstruktiv oder konkret und oft von einem gewissen "Ego" getrieben, das sich eher darauf beschränkt, jede Menge Kommentare zu schreiben.

Ich habe dich "Kumpel" genannt, weil du "Glück auf" in deiner Signatur schreibst. Das ist ja der Gruß der Bergleute, also "Kumpel". Ich vermisse allerdings deinen kumpelhaften Willen, anderen uneigennützig zu helfen.

Naja - solange Leute wie du ihre "Meinungen" in diesem Forum und in dieser Form "zum Besten" geben, wird es kaum ein Forum sein oder werden, in dem Fragenden mit konkreten Tipps und Hilfen aktiv Unterstützung geleistet wird. Und im Gegenteil: Leute werden abgeschreckt, wenn Antworten auf ihre Fragen nicht einigermaßen konkret ausfallen.

Natürlich verwahre ich mich entschieden gegen den "Hüstel-Vorwurf" in deinem letzten Absatz. Ich verfolge auch kein "eigenes Interesse" - was sollte das auch sein, außer dich (und wenige andere) darauf hinzuweisen, dass die "Antworten" oft nicht wirklich weiter helfen?

Eberhard, du bist aus meiner Sicht leider nur ein "Oberlehrer", der nicht in der Lage ist, sein zweifelsfrei vorhandenes Wissen konkret und konstruktiv weiter zu geben.

Nun denn,
Crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

DF6GL

 @ crystel:

täusche ich mich oder hattest Du nicht mal vor, dieses ach so zur Hilfeleistung unfähige Forum zu verlassen? Warum bist Du da nicht konsequent?

Zitat.. oft von einem gewissen "Ego" getrieben, das sich eher darauf beschränkt, jede Menge Kommentare zu schreiben.

Dafür bist Du doch selber ein wesentlich besseres Beispiel.

Solche Diskussionen brauchen wir hier nicht, schon gar nicht in einem Thread eines Hilfesuchenden.
 



ebs17

September 08, 2020, 17:32:36 #8 Letzte Bearbeitung: September 09, 2020, 09:57:55 von ebs17
Zitatsind deine Beiträge in diesem Forum eher selten konstruktiv oder konkret
Nun, der Themenersteller konnte bereits mit der ersten Antwort von mir etwas anfangen ohne eigene Überforderung (das leite ich von der Reaktion ab), und mit der zweiten Antwort und dem verlinkten Inhalt vermutlich wohl auch. Ansonsten wäre in der längeren Zeit noch einmal eine Rückfrage aufgetaucht.
Deine Auffassungsgabe steht also nicht stellvertretend für die gesamte Leserschaft.

ZitatAus meiner persönlichen Sicht
Diese darfst Du gern als solche äußern. Ich wehre mich allerdings dagegen, wenn Du Deine Sicht und Dein Verständnis verallgemeinerst und so tust, als wäre es generell so. Ich kann Dir aus Erfahrung versichern, dass nicht wenige meine Hinweise auch genau so verstehen.

ZitatIch würde gern ein paar konkrete Hinweise von dir sehen, z. B. Code-Beispiele oder (kurze) Beschreibungen
Ich hätte die Gegenerwartung, dass man in der Lage ist und es tut, einen gegebenen Link anzuklicken und sich mit dessen Inhalt zu beschäftigen, ggf. sogar nicht nur zum Abkopieren, sondern auch in kreativer Auseinandersetzung.

ZitatDieses Forum soll doch dazu dienen, Fragenden möglichst einfach und konkret, evtl. mit Beispielen, zu HELFEN
Ich staune immer wieder, wie da Leute neu daherkommen und dann erklären, was genau das Forum zu tun hat. Solche Erleuchter zeichnen sich aber extrem selten durch eine langfristige Unterstreichung ihres Anspruches mit eigener Leistung für das Publikum aus.
Sowie: Die einen meinen, Fragende wären durchzupampern, sollten also unmittelbar und überschwellend eine kopierfähige Lösung präsentiert bekommen. Andere meinen, solch ein Forum für Access (Access = Entwicklungsumgebung) solle Hilfe zur Selbsthilfe geben. Im zweiten Fall müsste man also nicht für jeden die Entstehung der Welt neu erklären, die ja irgendwo schon geschrieben steht und selber gelesen werden kann. Einer wirklich konkreten Frage basierend darauf wird sich aber keiner verschließen.
"Wer hilft, wo fördern reicht, schädigt." (Josef Schmidt)

Zitatvon einem gewissen "Ego" getrieben
Wieder aus mehrfachem Erleben: Wer so kommt, ist hinsichtlich des eigenen Egos nicht unverdächtig.

ZitatIch verfolge auch kein "eigenes Interesse"
Nach Lösungen zu schreien, die einen gar nicht interessieren, vom Lernenwollen mal ganz zu schweigen - man könnte das irritierend finden.
Die Art, danach zu fragen, empfindet wohl auch nicht jeder als höflich und angemessen.
Strahlende Vorbilder. Warum denke ich gerade an Verglühen?

Wenn man den schon erwähnten Linkinhalt für sich erschlossen hat, sollte man für die zweite Abfrage auf etwa einen solchen Ansatz kommen:
INSERT INTO
   tblArbeitsschritte(
      fIDProjekt,
      [Feldliste]
   )
SELECT
   X.I,
   [Feldliste]
FROM
   tblArbeitsschritte,
   (
      SELECT
         I
      FROM
         T999
      WHERE
         I BETWEEN 250 AND 290
   ) AS X
WHERE
   fIDProjekt = 237
Ansatz deswegen, weil hardcodierte ID's nun nicht einer allgemein verwendbaren Lösung entsprechen.
Nebenbei: 250 bis 290 wie gewünscht sind ungleich 40 wie gewünscht - wenn man konkret auf den Punkt bringt.
Mit freundlichem Glück Auf!

Eberhard

Frank70

Hallo,

ch melde mich dann auch nochmal... :-(

Ich konnte das Problem mit 2 Abfragen lösen.
Danke aber nochmal allen für die Mühe.

Viele Grüße
Frank