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, 18389 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
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ä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
gelöst Access Abfrage in nächste freie Zeile von Excel Sheet kopieren (5)

Frage von Dr.Cornwallis zum Thema Datenbanken ...

LAN, WAN, Wireless
Freifunk über vorhandene Access Points ausstrahlen (2)

Frage von Uwoerl zum Thema LAN, WAN, Wireless ...

Heiß diskutierte Inhalte
Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...

Exchange Server
DNS Einstellung - zwei feste IPs für Mailserver (15)

Frage von ivan0s zum Thema Exchange Server ...