Hallo Realgar,
das Problem ist kompliziert und es gibt verschiedene Ansätze. Das Hauptproblem sind abgebrochene Aktionen und parallele Zugriffe durch weitere Anwender. Prinzipiell gehe ich davon aus, das dein Datenmodell eine referenzielle Integrität zwischen den 1:n-Tabellen enthält. Somit muss der Datensatz im Hauptformular bereits gespeichert sein, bevor du die Datensätze im Hunterformular hinzufügst. Dabei handelt es sich um unabhängige Ereignisse, die bei einem Abbruch der Ausfürhung beachtet werden müssen..
Ansatz 1:
Du erzeugst dir eine weitere Struktur der beteiligten Tabellen (TEMP), die die eingetragenen Informationen aufnehmen. Bei Drüclen des Save-Buttons überträgst du die Daten in die Haupttabellen, wobei evtl. die Referenzierungsfelder (bei Autowert in der 1-Tabelle) ein paar Hinternisse bereit halten. Beim Cancel.Button löschst du einfach die Daten aus den TEMP-Tabellen. In einer Mehrbenutzerumgebung musst du die TEMP-Tabellen lokal halten oder über den Benutzernamen eindeutig markieren. Beim Start der Anwendung (oder Öffen des Formulars) löschst du ebenfalls die TEMP-Tabellen, falls es abstürze gab, sicher ist sicher.
Ansatz 2:
In des Tabellen fügst du zwei weitere Felder (z.B. valid as boolean und einen eindeutigen Benutzernamen) ein. Beide Felder werden nicht angezeigt. Das Feld Benutzername setzt du direkt beim Anzeigen des Datensatzes.Das Valid-Feld wird ebenfalls nicht angezeigt, sondern durch den save-Button gesetzt. Beim Cancel-Button löschst du ganz normal die den Hauptdatenssatz und über die Löschverfolgung auch die abhängigen Datensätze. Sollte das System zwischenzeitlich abschmieren, steht der DS noch mit valid = false in der DB. Diese Daten dürfen in den weiteren Programmteilen nicht beachtet werden, was evtl. größere Programmänderungen mit sich führt. Beim Öffnen des Formulars kannst du also die Datensätze des angemeldeten Benutzers mit vald=false einfach löschen.
Ansatz 3:
mit Begintrans, committrans und rollback stehen dir DB-eigene Funktionen zur Verfügung um unabhängige SQL-Transaktionen zu kapseln, die aber nach meiner Meinung nur komplett in VB sinnvoll zu realisieren sind. Das würden hier den Ansatz sprengen. Du findest über die Access-Hilfe einen ersten Einblick zu diesem Thema.
Es gibt bestimmt noch viele weitere Ansätze. Ansatz 1 ist für mich der einfachste Weg, da die bestehende Anwendung nicht beeinflusst wird. Ansatz 2 hat den Vorteil, dass du nicht weitere Tabellen verwalten musst. Ansatz 3 ist smart, beim Einsatz von Backend-DB wie MSSQL oder Oracle.
Ich hoffe, die Tipps helfen dir ein wenig bei deinen Überlegungen. Wir wirst du das Problem lösen?
Gruß
Ralf