Office: (Office 2003) Kopieren mehrerer Datensätze mit deren in Beziehung stehenden DS

Helfe beim Thema Kopieren mehrerer Datensätze mit deren in Beziehung stehenden DS in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo zusammen, ich habe ein etwas spezielles Problem und konnte weder bei meiner allgemeinen Suche noch unter "Anfügeanfragen" eine Lösung finden.... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von Adversarius, 1. Februar 2014.

  1. Kopieren mehrerer Datensätze mit deren in Beziehung stehenden DS


    Hallo zusammen,

    ich habe ein etwas spezielles Problem und konnte weder bei meiner allgemeinen Suche noch unter "Anfügeanfragen" eine Lösung finden. (Bzw. konnte Nichts davon adaptieren, bin noch nicht so weit über das Anfängerstadium hinaus).

    Ersteinmal der praktische Sinn des Ganzen:
    Mit meiner Datenbank erstelle ich Projekte.
    Diesen Projekten werden (mehrere) Projektpositionen zugeordnet.
    Diesen Projektpositionen werden (mehrere) Detailinformationen zugeordnet.

    Soweit funktioniert alles 1A.

    Nun möchte ich nach Erstellen eines Projektes (Entwurf 1),dieses und alle zugehörigen Datensätze "duplizieren"/"kopieren" und als Entwurf 2 speichern. Nun kann ich an Einzelheiten dieses 2. Entwurfes Änderungen vornehmen ohne, dass mein erster Entwurf verlorengeht (zu Vergleichszwecken).

    Zur Unterscheidung soll eine Entwurfsnummer dienen, die dann natürlich bei den neuen DS nach Kopierenentsprechend jedesmal höher (also beim ersten mal duplizieren z.B.2) wäre.

    Kann mir jmd. nen Anstoß geben, wie da vorzugehen ist?

    Vielen Dank im Voraus

    Mit freundlichen Grüßen
    Adversarius

    :)
     
    Adversarius, 1. Februar 2014
    #1
  2. Hallo,

    mit der Anfügeabfrage bist du auf dem richtigen Weg.
    Um mehr dazu zu sagen, bräuchte man Infos über die konkrete Tabellen-/Beziehungsstruktur.
    Insbesondere über die verwendeten Primärschlüssel in den Tabellen.

    Prinzip:
    Füge eine Kopie des Hauptdatensatzes (Projekt) an, hole dir den Primärschlüssel des neuen Datensatzes,
    kopiere die Projektpositionen unter Verwendung des neuen Projekt-Primärschlüssels, hole dir den neuen Positionen-Primärschlüssel, ... usw.
     
    Marsu65, 2. Februar 2014
    #2
  3. Hallo Masu,

    danke für die schnelle Antwort. Wie du im Gif sehen kannst, würde der Prozess damit beginnen, dass ein Datensatz aus Tbl. "ProjektEntwürfe" ausgewählt werden müsste (bzw. der alktuelle DS) und kpoiert wird. Dieser wäre z.B. Entwurf Nr.1, die Kopie wäre dann "EntwurfNr" 2 (Feldwert) und müsste noch eine Bemerkung bekommen (z.B. Entwurf mit geänderten Stundensätzen) per Msg-box oder so (später).Gleich bliebe (wenn ich das richtig sehe) dann ja nur die Projektnummer (da ja zum gleichen Projekt gehörig).

    Im nächsten Schritt, würden dann alle DS für diese Projektnummer und die EntwurfsNr aus Tbl. ProjektPositionen kopiert und verknüpft werden müssen, wobei sich bei den Kopien ebenfalls die Entwurfsnummer um eins erhöhen würde,usw.

    Ich verstehe aber nicht, wie ich eine Anfügeabfrage da einsetze!?
     
    Adversarius, 2. Februar 2014
    #3
  4. Kopieren mehrerer Datensätze mit deren in Beziehung stehenden DS

    Hallo!

    Da du später sowieso Vergleiche machen willst, würde ich in jedem neuen Datensatz die ID des Datensatzes speichern, aus dem er erstellt wurde.
    Dann ist auch beim Kopieren die Zuordnung der Detailinformationen zu den Projektpositionen kein Problem.

    Prinzip (Luftcode!):
    Code:
    Code:
    /edit:
    fiProject, [QuellProjektID], [NeueProjektID] musst du natürlich durch Entwurfs_ID ersetzen.

    BTW: Passt dein Datenmodell? - In ProjektPositionen steht EntwurfNr, das Feld ist aber mit Entwurf_ID verknüpft.
    Gleiches in ProjektPosDetails: Es sieht aus, als würdest du einen 3-Felder-FK bilden, die RI zeigt aber wieder auf das ID-feld der Positionstabelle. (Oder wurde das in Access mittlerweile auch schon umgestellt, dass die RI-Linien nicht mehr direkt auf die verknüpften Felder zeigen?)

    .. würdest du die Beziehungen über die Mehr-Felder-RI abbilden, wäre die SQL-Anweisung noch einfacher.


    mfg
    Josef
     
    Josef P., 2. Februar 2014
    #4
  5. Hallo Joseph,

    also erstmal bitte, bitte nen Gang zurück *wink.gif* , bin n bisschen erschlagen von dem Input und wie gesagt noch weit von Profiuser oder wirklich fortgeschrittenen Kenntnissen entfernt:

    1.Ist hier SQL zwingend notwendig ?(bzw. geht das nicht mit vba!? , ich komme gerade so damit zurecht, aber wenn sql hier die ultima ratio ist, dann fuchs ich mich rein)

    2.Wo genau müsste der Code rein? (Ich müsste erstmal wissen ob eine/mehrere Anfügeabfragen und was die abdecken müssten, bzw. welchen Inhalt die haben müssen)

    3.Ich bin mir nicht 100%ig sicher ob mein Model so ok ist, da ich bisher im Rest meines Programmes, meiner DB nicht soviele Stufen von Verknüpfungen brauchte.Vielleicht kannst du mal nen Blick drauf werfen.

    Danke für deine Mühe

    liebe Grüße Adversarius
     
    Adversarius, 2. Februar 2014
    #5
  6. Hallo!

    Vorab: Ich sah mir deine Beispiel-Db noch nicht an.

    Zuerst einmal zum Datenmodell:

    Ob dein Modell ok ist, hängt davon ab, was du haben willst.

    Variante 1 (immer nur 1 Feld als PK (Primärschlüssel) / FK (Fremdschlüssel))
    Tabelle "Projektdaten"
    PK = ProjektNr

    Tabelle "ProjektEntwürfe"
    PK = Entwurfs_ID (ich vermute Autowert)
    FK zu Projektdaten = ProjektNr

    Tabelle "ProjektPositionen"
    PK = Projekt_Positions_ID
    FK zu ProjektEntwürfe = fiEntwurf ("EntwurfNr" ist meiner Meinung nach als Name für die DI schlecht gewählt, da es dieses Feld ebenso in der ProjektEntwürfe-Tabelle gibt)

    Tabelle "ProjektPositionsDetails"
    PK = Projekt_Detail_ID
    FK zu ProjektPositionen = fiPosition (DetailNummer für ID ist ein schlechter Name, da diese Feld in der ProjektPositionen-Tab nicht der PK ist.


    Variante 2 (Mehrfelder-PK/FK)
    Tabelle "Projektdaten"
    PK = ProjektNr

    Tabelle "ProjektEntwürfe"
    PK = ProjektNr + EntwurfNr
    FK zu Projektdaten = ProjektNr

    Tabelle "ProjektPositionen"
    PK = ProjektNr + EntwurfNr + ALPosNr
    FK zu ProjektEntwürfe = ProjektNr + EntwurfNr

    Tabelle "ProjektPositionsDetails"
    PK = ProjektNr + EntwurfNr + ALPosNr + DetailNr
    FK zu ProjektPositionen = ProjektNr + EntwurfNr + ALPosNr


    Variante 3 (Mehrfelder-PX/FK + Autowert-UX (Surrogatschlüssel) zum schnellen Aufrufen/Filtern eine DS)
    (UX = eindeutiger Index (unique index))

    Tabelle "Projektdaten"
    PK = ProjektNr

    Tabelle "ProjektEntwürfe"
    PK = ProjektNr + EntwurfNr
    FK zu Projektdaten = ProjektNr
    UX = Entwurfs_ID

    Tabelle "ProjektPositionen"
    PK = ProjektNr + EntwurfNr + ALPosNr
    FK zu ProjektEntwürfe = ProjektNr + EntwurfNr
    UX = Projekt_Positions_ID

    Tabelle "ProjektPositionsDetails"
    PK = ProjektNr + EntwurfNr + ALPosNr + DetailNr
    FK zu ProjektPositionen = ProjektNr + EntwurfNr + ALPosNr
    UX = Projekt_Detail_ID


    Anm.:
    Variante 1 wird gerne genommen, weil es für viele Access-Nutzer so "üblich" ist. *wink.gif*

    Für deinen beschriebenen Fall würde ich vermutlich die 2. (oder 3.) Variante einsetzen, da ich annehme, dass diese Variante in der späteren Verwendung weniger Aufwand bedeutet. (Ich kenne allerdings deinen genauen Einsatzzweck deiner Anwendung nicht - muss ich auch nicht. *wink.gif*)
    .. allerdings muss man bei dieser Variante immer beachten, dass alle benötigen Felder zum Verknüpfen verwendet werden.
    Diese Variante hat aber den Vorteil, dass du die Details bereits nach Projekt und Entwurfsnummer filtern kannst, ohne einen Join auf die Entwurfs-Tabelle zu benötigen.


    Du kannst natürlich alles über Recordsetschleifen erstellen. Mit ein paar Anfügeabfragen ist das aber schneller und einfacher. (Anfügeabfragen kannst du über VBA starten.)

    Ein Beispiel wie das Anfügen mit Variante 2 oder 3 laufen würde:

    Annahme: Bekannt ist ProjektNr, die zu kopierenden EntwurfsNr und die neue Entwurfsnummer.

    Bei Bedarf Projekt-Entwurf-DS kopieren:
    Code:
    Positionen kopieren:
    Code:
    Details kopieren:
    Code:
    Diese 3 SQL-Anweisungen könntest du in Access als Parameter-Abfragen speichern und per VBA als QueryDef mit gesetzten Parametern für die obigen Parameter ([xxx]) ausführen.
    Anm.: wie du die Parameter-Abfragen mittels QueryDef-Objekt ausführen kannst, zeige ich dir gerne, allerdings erst, wenn du dich für ein Datenmodell entschieden hast.
    Es ginge zwar auch über einen zusammengesetzten SQL-String, der an Db.Execute übergeben wird, das würde ich allerdings nicht machen, da die QueryDef-Variante eine übersichtlichere und weniger fehleranfällige Variante ist.

    mfg
    Josef
     
    Josef P., 2. Februar 2014
    #6
  7. Kopieren mehrerer Datensätze mit deren in Beziehung stehenden DS

    Hallo,

    @Uwe: danke, dass du mir ebenfalls helfen möchtest, leider funktioniert der Link nicht (sollte doch einer sein oder!?)

    @josef: Also, die Variante 2 gefällt mir sehr gut (IST GEKAUFT *grins ) , auch wenn mir das erst sehr komisch vorkam und soein ZAUBERKRAM *tongue.gif* in meinen Lehr-/Übungsbüchern nicht drin ist und ich das zum ersten Mal so sehe.

    Sehr positiv ist, dass ich nicht wusste, dass so die Kombinationenen zweier Schlüssel indiziert sind, also ProjektNr 10000,EntwurfNr 1 und 10000 / 2 werden zugelassen (ich dachte, das würde er so sperren, wie die Verknüpfung jetzt ist), tatsächlich indiziert er jetzt nur die Doppelkombination 10000/1 und 10000/1, was eine weiteres Problem war, das dann gleich mit gelöst ist (denn es gibt ja nur einen Entwurf 1 pro Projektnummer)

    Nun habe ich erstmal eine Zwischenfrage: Ich muss natürlich jetzt jedesmal wenn ich eine Ebene weiter gehe prinzipiell jedesmal wieder die Daten eingeben die bereits bekannt sind, ich habe also z.B. in den Projektdaten das Projekt 10000 angelegt, dann muss ich in den Entwurfsdaten ja wieder die 10000 eingeben, bevor ich die Entwurfsnummer eingebe, und in jeder Ebene danach ja immer einen Wert mehr. Wie kann ich diese Werte "übernehmen lassen" (also wirklich ganz pragmatisch im Programm!?,vgl. DB, ausschlaggebendes Form "AngebotskalkulationsDetails", da das unbedingt weiterhin funtkionieren muss und das kann ich gerade echt nicht beurteilen). Würdest du dir die Mühe machen, mir das kurz zu erklären ?! (voher macht es wenig sinn, wenn wir an dem Kopieren weiterarbeiten)

    LG Adversarius
     
    Adversarius, 3. Februar 2014
    #8
  8. Oh sorry, hier nochmal das Update
     
    Adversarius, 3. Februar 2014
    #9
  9. Hallo!

    Wie hast du das bisher mit der ProjektNr gemacht? Du musstest die Entwürfe doch genauso mit dem Projekt verknüpfen bzw. die Details mit den Entwürfen.

    Eine relativ einfache Variante:
    Ein Hauptformular an die Projekt-Tabelle binden und ein an die Entwurfs-Tabelle gebundenes Unterformular einfügen. Wenn die beiden Formular über die ProjektNr verknüpft sind, füllt Access die ProjektNr automatisch aus, wenn du eine neue Entwurfsnummer eingibst.
    ... also so wie in deinem Übersichtsformular in deiner angehängten DB.

    mfg
    Josef
     
    Josef P., 3. Februar 2014
    #11
  10. Hallo ,

    @ Uwe: Ja Top, klappt jetzt, sehr interessante und hilfreiche Seite!

    @Josef:ja du hast Recht, musste ein bisschen umbauen, aber jetzt funtkioniert alles genauso wie es soll. So und jetzt muss ich wie genau fortfahren?
     
    Adversarius, 4. Februar 2014
    #12
  11. Kopieren mehrerer Datensätze mit deren in Beziehung stehenden DS

    Hallo,

    also ich hab jetzt ziemlich viel mit der Beschreibung von Uwe rumgedockert, allerdings ist mein Fall ja mehrstufiger und ich komm so nicht weiter.

    Daher wäre es schön, wenn du mir nochmal den Ansatz von oben (Parameterabfragen,etc.) genauer erklären könntest (eine Variante habe ich ja jetzt ausgesucht), Josef.
     
    Adversarius, 27. Februar 2014
    #13
  12. Hallo!

    Da du die Variante mit den Mehrfelder-PK verwendest, ist das Kopieren sehr einfach, da du nur die alte durch die neue Entwurfsnummer ersetzen musst.

    Prinzip (Alles Luftcode!:
    Code:
    Ich würde die Insert-Anweisungen in einer Paramter-Abfrage erstellen und NeueEntwurfNr, ZuKopierendeProjektNr sowie ZuKopierendeEntwurfNr als Parameter übergeben.

    Prinzip:
    SQL-Anweisung in "qryProjektPositionenKopieren" gespeichert:
    Code:
    Verwendung in VBA:
    Code:
    mfg
    Josef
     
    Josef P., 27. Februar 2014
    #14
  13. Hallo Josef,

    erstmal vielen Dank für die Antwort.
    Also ich mache derartige Abfragen zum ersten Mal: Ist der 1. Code nur eine Ablaufübersicht, oder muss ich den unter meinen Button "Entwurf Duplizieren" als Klickereignis in VBA setzen oder erstetzen die Parameterabfrage und die DAO Anweisung unten diesen ersten Code!?!?
    Also ich versteh irgendwie noch nicht so ganz was ich davon brauche (Also alle 3 oder nur 2 und 3)!? Kannst du noch einen Gang runter schalten und das noch ein bisschen mehr step für step aufdröseln!? (DANKE FÜR DIE NACHSICHT *wink.gif* )
     
    Adversarius, 28. Februar 2014
    #15
Thema:

Kopieren mehrerer Datensätze mit deren in Beziehung stehenden DS

Die Seite wird geladen...
  1. Kopieren mehrerer Datensätze mit deren in Beziehung stehenden DS - Similar Threads - Kopieren mehrerer Datensätze

  2. Werte aus mehreren Spalten kopieren und darunter einfügen

    in Microsoft Excel Hilfe
    Werte aus mehreren Spalten kopieren und darunter einfügen: Hallo zusammen, leider konnte ich im Internet und auch in diesem Forum keine passende Antwort finden. Ich habe eine .csv Datei, bei der ich mehrere Spalten habe. Es handelt sich hierbei um...
  3. Kontrollkästchen (mehrere) Makro kopieren, Problem: Zellen nicht gegenseitig überschreiben

    in Microsoft Excel Hilfe
    Kontrollkästchen (mehrere) Makro kopieren, Problem: Zellen nicht gegenseitig überschreiben: Hallo zusammen, ich arbeite gerade an einer Vereinfachung für Bestellungen. Ich habe es hingekriegt, dass Kontrollkästchen an zu wählen sind und dann bestimmte Informationen kopiert werden. Jetzt...
  4. Daten aus mehreren Blättern kopieren

    in Microsoft Excel Hilfe
    Daten aus mehreren Blättern kopieren: Hallo zusammen, ich würde gerne in der Spalte B den Namen aus einem anderen Blatt kopieren. Händisch müsste ich so in die passenden Zeilen die Formel ='1'!$B$3; ='2'!$B$3, ='3'!$B$3 eintragen....
  5. Tastaturbefehle Ctrl + C, Ctrl + V, Ctrl + X funktionieren in Word nicht mehr

    in Microsoft Word Hilfe
    Tastaturbefehle Ctrl + C, Ctrl + V, Ctrl + X funktionieren in Word nicht mehr: Hallo zusammen Seit kurzem funktionieren in Word die Tastauturbefehle für Kopieren, Einfügen, Ausschneiden nicht mehr. Das Problem tritt nur in Word auf – überall sonst funktionieren die Kürzel....
  6. Mehrere Zellen aus geschlossener Datei kopieren

    in Microsoft Excel Hilfe
    Mehrere Zellen aus geschlossener Datei kopieren: Hallo, ich versuche aus einer geschlossene .xls Datei 7 Zellen zu aktive Mappe zu kopieren. Das Klappt aber nicht mit folgenden Code. Sub aa() Dim Rechnung As String Dim Datum As String Dim...
  7. Mehrere Datensätze markieren, kopieren und mit aktuellem Datum einfügen

    in Microsoft Access Hilfe
    Mehrere Datensätze markieren, kopieren und mit aktuellem Datum einfügen: Hallo zusammen, ich habe ein Problem, bei dem ich gerade leider nicht weiter komme. Ich habe eine Access-Datenbank erstellt, in der u.a. täglich mehrere Datensätze kontrollierter Bauteile...
  8. Makro VBA: Kopieren aus Quelldatei nach Zieldatei über mehrere Tabellen

    in Microsoft Excel Hilfe
    Makro VBA: Kopieren aus Quelldatei nach Zieldatei über mehrere Tabellen: Hallo, leider kann ich maximal Makros aufzeichnen. Damit komme ich bei meinem jetzigen Problem allerdings nicht weiter. Problem: Monatlich soll ein Auszug von Daten aus einer Quelldatei die ich...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden