Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Access Datensätze im Unterformular kopieren

Anleitung Microsoft Microsoft Office

Mitglied: cim

cim (Level 1) - Jetzt verbinden

28.04.2008 um 09:32 Uhr, 18457 Aufrufe

In Access müssen Datensätze des Hauptformulars und des Unterformulars kopiert werden.
Eine einfache Kopie reicht nicht aus, da die Unterdatensätze die ID des neuen Hauptdatesatzes erhalten müssen, damit beide miteinander verknüpft werden.

Die Lösung gibt's sicherlich tausendfach, hier ist nur ein Beispiel.

Erläuterung:
Objekte:
"Haupttabelle" mit Feld "ID"
"Untertabelle" mit Feld "HauptID"
Anfügeabfragen für Haupt- und Untertabelle, die nur die Datensätze anzeigen, die die ID des Quelle-Datensatzes haben!

Die Funktion "DSKopie" wird aus dem zu kopierenden Datensatz des Hauptformulars aufgerufen.

Der IF-Anschnitt kann beliebig oft für weitere Unterformulare kopiert werden.
Anstatt der FOR-Schleife kann natürlich auch DO oder WHILE eingetragen werden.
Anstatt der Abfragen können natürlich auch die SQL-Anweisungen ausgeführt werden. Bei großen Tabellen kann der Code dann aber "riesig" werden.

1) Um die Kopie aus beliebigen Datensätzen heraus auszuführen, wird die Variable "ActualForm" als Formularobjekt angelegt.
2) Speichere die ID in einem ausgeblendeten Formular, z.B. dem Startmenü für die spätere Verwendung in den Abfragen.
3) Kopiere den alten Quelle-Datensatz in der Haupttabelle mit einer Anfügeabfrage.
4) Öffne die Haupttabelle als Recordset. Hier mit Sortierung, damit auch wirklich der neueste Datensatz erreicht wird.
5) Merke die ID des neuen Ziel-Datensatzes
6) Hat der Quelle-Datensatz Einträge der Untertabelle?
7) Anfügeabfrage der Untertabelle, die nur Nummern wie unter 2) kopiert
8) Setze in den Ziel-Datensatz der Untertabelle die ID, die den Datensatz mit der Haupttabelle verknüpft.
9) Wurden mehr als ein Datensatz kopiert? Dann muss der vorherige auch die Verknüpfungs-ID erhalten.

Function DSKopie()
Dim DB As Database, RST As Recordset
Dim LastID As Integer, ThisID As Integer
Dim ActualForm As Form

Set ActualForm = Screen.ActiveForm '1)
Forms!start!AblageID = Forms(ActualForm.Name)!ID '2)
DoCmd.OpenQuery "DSCopyHaupt" '3)

Set DB = CurrentDb
Set RST = DB.OpenRecordset("SELECT Haupttabelle.* FROM Haupttabelle ORDER BY Haupttabelle.id;") '4)
RST.MoveLast
LastID = RST!ID '5)

If DCount("id", "Untertabelle", "[HauptID] = " & Forms!start!AblageID) > 0 Then '6)
DoCmd.OpenQuery "DSCopyUnter" '7)
Set RST = DB.OpenRecordset("SELECT Untertabelle.* FROM Untertabelle ORDER BY Untertabelle.id;")
RST.MoveLast
RST.Edit
RST!HauptID.Value = LastID '8)
RST.Update
For x = 2 To DCount("id", "Unterabelle", "[HauptID] = " & Forms!start!AblageID) '9)
RST.MovePrevious
RST.Edit
RST!HauptID.Value = LastID
RST.Update
Next x
End If

Set RST = Nothing
Set DB = Nothing

End Function
Neuester Wissensbeitrag
Ähnliche Inhalte
VB for Applications
gelöst Xml-Datei laden bzw. auf Festplatte kopieren und per VBA in eine Access-Tabelle speichern (22)

Frage von machohunk zum Thema VB for Applications ...

Datenbanken
Access 2010 - Filter für Datum funkioniert nicht VBA (4)

Frage von Dr.Cornwallis zum Thema Datenbanken ...

Microsoft Office
gelöst Probleme beim Aufrug von Google Maps aus einem MS-ACCESS 2013 Formular (9)

Frage von CADastrophe zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Google Android
gelöst Android-Handy versehentlich (dauerhaft) gesperrt? (23)

Frage von FA-jka zum Thema Google Android ...

DSL, VDSL
gelöst DSL 200m verlängern (14)

Frage von Angela44 zum Thema DSL, VDSL ...

Batch & Shell
gelöst Ordner und Datei Name gleich (BATCH) (12)

Frage von clragon zum Thema Batch & Shell ...

Windows Server
SBS 2011 Standard virtualisieren (11)

Frage von HeinrichM zum Thema Windows Server ...