Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Formular öffnen mit unterschiedlichen Bedingungen

Begonnen von Stefan_123, Dezember 02, 2024, 12:25:50

⏪ vorheriges - nächstes ⏩

Stefan_123

Hallo, liebe Forengemeinde,
nach vielen Jahren darf ich mich wieder mit Access beschäftigen und stehe vor einem Problem, wo ich nicht weiter komme. Ja, man könnte das mit einem zusätzlichen Formular umgehen, das möchte ich aber nicht.

Zum Thema:
Ich habe ein Endlosformular "frm_Mitarbeiter", das mir zu allen Mitarbeitern div. Daten anzeigt. Die Eingabe ist gesperrt. Mache ich auf den Mitarbeiternamen einen Doppelklick, wird das Formular "frm_MitarbeiterBearbeiten" mit dem gleichen Datensatz geöffnet. In diesem Formular ist unter Daten "Anfügen zulassen" auf nein gestellt.
Private Sub Vorname_DblClick(Cancel As Integer)
    DoCmd.OpenForm "frm_MitarbeiterBearbeiten", , , "Mitarbeiter_ID = " & Me.Mitarbeiter_ID
End Sub
Das Formular bleibt schön in dem einen Datensatz und wird mit
Private Sub btnOK_Click()
    DoCmd.Save acForm, "frm_MitarbeiterBearbeiten"
    DoCmd.Close
End Sub
gespeichert und mit
Private Sub btnAbbruch_Click()
    Me.Undo
    DoCmd.Close
End Sub
abgebrochen.

Nun habe ich im Formular "frm_Mitarbeiter" noch einen Button für "neuen Mitarbeiter". Mit dem möchte ich das Formular "frm_MitarbeiterBearbeiten" aufrufen und zu einem neuen Datensatz springen, um einen weiteren Mitarbeiter anlegen zu können. Und genau dabei bleibe ich nun hängen. Könnt ihr mir bitte beim entsprechenden Code helfen? Wie muss ich dieses Formular aurufen?

Wäre über Eure Hilfe sehr dankbar, da diese Konstellation in meiner DB öfter vorkommen wird.

LG Stefan


MzKlMu

#1
Hallo,
Der Button btnOK ist sinnlos. Hier werden keine Daten gespeichert, sondern der Befehl dient der Speicherung eines ggf. geänderten Entwurfs des Formulars. Mit Datenspeicherung hat DoCmd.Save nichts zu tun. Access speichert Daten immer automatisch sobald das Formular geschlossen oder zu einem anderen DS gesprungen wird.
Bewusst wird mit
Me.Dirty = Falseoder
DoCmd.RunCommand acCmdSaveRecordgespeichert.
Um das Speichern unvollständiger Datensätze zu verhindern muss das Formularereignis "Vor Aktualisierung" verwendet werden. Hier erfolgt die Datenvalidierung. Wenn diese nicht stimmt, wird der Parameter Cancel auf True gesetzt und das Speichern somit verhinderd.

Auch der Button btnAbbruch scheint mir fragwürdig, die Speicherung eines leeren Datensatzes wird hier nicht verhindert. Im Gegenteil, mit Me.Undo leerst Du das/die Feld/er und Close schließt das Formular und speichert auch den DS.

Hier wird das Formular mit einem neuen leeren Datensatz geöffnet.
DoCmd.OpenForm "frm_MitarbeiterBearbeiten", acNormal, , , acFormAdd
Gruß Klaus

Stefan_123

Hallo Klaus,
wow... vielen Dank für die Rasche und ausführliche Antwort.

Der Aufruf mit einem leeren Datensatz funktioniert super, auch wenn "Anfügen zulassen" auf nein steht - perfekt  ;D

Zu den beiden Buttons...
Das heißt also, bei dem OK-Button bräuchte ich nur den Code
Private Sub btnOK_Click()
    DoCmd.Close
End Sub
hinterlegen. Dann würde der Datensatz ja beim Schließen des Formulars gespeichert werden.

Aber, wie kann ich den Abbruch-Button definieren?
Gewünscht wäre jeweils (Neuanlage oder Daten bearbeiten), dass die Eingabe im bestehenden oder für den neuen Datensatz verworfen werden und das Formular geschlossen wird.
Ein neuer Datensatz wird aktuell nicht gespeichert.

MzKlMu

#3
Hallo,
der OK Button ist OK.  :)

zum Abbrechen:
Me.Undo
DoCmd.Close

ZitatEin neuer Datensatz wird aktuell nicht gespeichert.
Und wie verhinderst Du das Speichern ?
Ein neuer Datensatz wird unweigerlich gespeichert, wenn Du das nicht aktiv verhinderst und die eingegebenen Daten nicht gegen Regeln verstoßen.

Machst Du keine Datenprüfung auf Richtigkeit (Validierung) oder kann man auch offensichtlich falsche Daten eingeben ?
Gruß Klaus

Stefan_123

Aktuell kannst du noch alle möglichen Daten eingeben bzw. beinhaltet der weitere Code für OK noch Prüfungen.

Ich kann nur sagen, dass der Abbruch-Code keinen Datensatz anlegt. Warum das so ist... ich bin kein Access-Profi aber derzeit scheint es zu funktionieren  :-[

MzKlMu

Hallo,
ZitatIch kann nur sagen, dass der Abbruch-Code keinen Datensatz anlegt.
Der Abbruchcode legt natürlich keinen neuen DS an, das ist ja der Sinn des Buttons. Ich habe ja auch nichts anders gesagt.
Der neue DS wird ja auch nicht gespeichert, aber nur wenn Du abbrichst (mit dem Button). Das ist ja auch richtig so.

Meine Frage zur Datenvalidierung hast Du überlesen ?
Gruß Klaus

Stefan_123

Ach so, sorry. Hab das dann falsch verstanden. (shameonme)
Die notwendige Validierung mache ich im Zuge des Speicherns und breche das ggf ab. Das funktioniert in dem Fall einwandfrei. Vielen Dank für deine Unterstützung