online 1
gast (50)

/ Forum / Datenbanken

DatenbankenDatenbanken

Fragevon Realgar vom 25.02.2022, 16:37 Options

Abbrechen Dateneingabe in Formular ohne Speichern

Hallo zusammen,

mir stellt sich folgendes Problem:
Ich habe mit Access ein Formular erstellt, welches zwei Unterformulare enthält, dem verbundene Tabellen zugrunde liegen. Eine Tabelle enthält Adressdaten einer Person, eine zweite Tabelle Telefonnummern der Person usw. Das Formular funktioniert soweit.

Nun möchte ich im Rahmen von Programmflusskontrolle dem Benutzer die Möglichkeit geben, während der Eingabe eines neuen Datensatzes jederzeit abzubrechen. In diesem Falle sollen die bisher eingegebenen Daten nicht gespeichert werden.
Die Speicherung soll nur dann erfolgen, wenn eine Schaltfläche "Speichern & Schliessen" betätigt wurde.
Zum Abbrechen habe ich eine Schaltfläche "Abbrechen" vorgesehen.
Deren Benutzung ruft ein Makro auf. Dieses Makro enthält die Aktionen "AbbrechenEreignis" sowie "Schließen". (Parameter: Objekttyp = Formular, Objektname = Formularname, Speichern = nein).

Leider funktioniert dies so nicht, im Falle eines Abbruches werden die bereits eingegebenen Daten trotzdem gespeichert.
Ferner habe ich noch versucht, das Formularereignis "Vor Aktualisierung" zu nutzen, d. h. hier in der Formularansicht "Ereignisprozedur" zu wählen. Nun bekomme ich jedoch noch während des Ausfüllens des Formulars eine Rückfrage, ob ich speichern will und zwar genau dann, wenn die Datenbefüllung von Feldern anfängt, die zur nächsten Tabelle des Formulars gehören (Z. B. Telefonnummern).

Besten Dank für Ideen und Hilfen & Herzliche Grüße


Antwort schreiben

Antwort 1 von bebi2000 vom 26.02.2022, 00:53 Options

hi

in access werden daten zur laufzeit in variablen geschrieben.
also bei jeder eingabe.
du musstest dise vor beendigung leeren da access sonst die änderung
speichern will.
wenn du das formular an eine abrage koppelst kanst du jederzeit
mir Esc abbrechen und die eingaben verwerfen.
die übergabe der daten geschiht erst beim SPEICHERN oder beeginn einer neuen eingabe. neuer datensatz.

vieleicht hilft dir das.

Antwort 2 von RaHi vom 28.02.2022, 10:09 Options

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

Ähnliche Themen

Automatisiete Dateneingabe - via .bat od .cmd
dersuchendeX09  25.02.2009 - 228 Hits - 7 Antworten

Daten aus Formular in Tabelle speichern
vidija  30.06.2009 - 555 Hits - 5 Antworten

Videos von youtube und Co speichern
KJG17  09.07.2009 - 1109 Hits -

Access: Formular in ein bestehendes Formular einbinden
ArthurAccess  30.09.2009 - 513 Hits - 2 Antworten

Access Formular
karin_a  16.10.2009 - 275 Hits - 1 Antwort

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026