Hallo zusammen und vielen Dank für die Aufnahme in diesem Forum.
Ich benutze Access 2013 und habe ein Problem mit den Pflichtfeldern in einem gebundenen Formular. (Die Pflichtfeld-Eigenschaft ergibt sich aus der Eigenschaft des jeweiligen Tabellenfeldes, programmiert hab ich hierzu bislang nichts.)
Wenn ich mit diesem Formular die gebundenen Datensätze bearbeite und nun den Wert eines Pflichtfeldes lösche, bekomme ich, wenn ich versuche, das Feld zu verlassen, richtigerweise die Messagebox "Geben Sie einen Wert in das Feld ein".
So ist es ja auch von Access vorgesehen, aber das macht mich nicht froh, denn Access "kennt" ja einen Wert für dieses Feld, der besser ist als nichts, nämlich den vorherigen Eintrag. Ich möchte deshalb gerne erreichen, dass das Feld bei unzulässiger Eingabe auf den Ursprungswert zurückspringt, anstatt eine quengelige Textbox anzuzeigen und den Nutzer auf dem Textfeld festzunageln.
Welchen Event-Handler muss ich hierzu benutzen? Ich hab den Eindruck, was auch immer ich tue, kommt mir die Access-eigene Prüfroutine zuvor. Oder kann ich den Fehler gezielt abfangen?
Ich würde mich freuen, wenn mir jemand einen Wink in die richtige Richtung geben könnte, damit ich Montag mit neuem Schwung weiterarbeiten kann. Momentan werde ich nur immer wirrer im Kopf und werfe mit Sachen. ;-)
Viele Grüße
Irene
Hallo Irene,
im BeforeUpdate Event des Steuerelements kannst du auf einen gültigen Wert prüfen und den ggf ersetzen.
Beispiel von MS (https://msdn.microsoft.com/en-us/library/office/ff822421.aspx)
Private Sub ProductName_BeforeUpdate(Cancel As Integer)
If(Not IsNull(DLookup("[ProductName]", _
"Products", "[ProductName] ='" _
& Me!ProductName & "'"))) Then
MsgBox "Product has already been entered in the database."
Cancel = True
Me!ProductName.Undo
End If
End Sub
Hallo,
Zitat
denn Access "kennt" ja einen Wert für dieses Feld, der besser ist als nichts, nämlich den vorherigen Eintrag.
Na, das ist ja auch eine Plausibilitäts-Sichtweise ;) :o 8)
Was hat denn der "vorherige" Datensatz mit dem aktuellen zu tun?
Wie auch immer, das Formular-Ereignis "Bei Fehler" ("Form_Error(...)") könnte auch zur Behandlung der auftretenden Fehlersituation benutzt werden.
Hi,
ZitatWas hat denn der "vorherige" Datensatz mit dem aktuellen zu tun?
so wie ich das verstanden habe, geht es nicht um den vorherigen Datensatz sondern um den vorherigen Inhalt des Datenfeldes vor der Änderung bzw. Löschung des Inhalts, also um die OldValue-Eigenschaft.
Die ließe sich wie bereits erwähnt mit UnDo leicht wiederherstellen.
Ja, vermutlich ist das auch so gemeint....
Hallo zusammen,
@Jürgen: Herzlichen Dank, ich hab jetzt das BeforeUpdate-Event benutzt und es funktioniert. (Ich hatte das schon früher versucht, aber dabei Cancel nicht auf True gesetzt, deshalb hatte es da nicht geklappt und ich wähnte mich auf dem falschen Weg.)
@Franz: Ups, ich meinte nicht den vorherigen Datensatz als Auffangwert, sondern den ursprünglichen, also den OldValue. Sorry für die unklare Ausdrucksweise. Danke für den Tipp, das Form_Error-Ereignis zu benutzten, das werde ich als Alternativweg unbedingt ausprobieren.
@MaggieMay: hat mich zum Glück richtig verstanden, dankesehr! :-)
So hab ich's jetzt gemacht:
Public Function pruefeLeer(eingabe As Variant) As Boolean
eingabe = Trim(eingabe)
If (IsEmpty(eingabe) = True) Or (eingabe = "") _
Or (IsNull(eingabe) = True) Or (Format(eingabe) = vbNullString) Then
pruefeLeer = True
Else
pruefeLeer = False
End If
End Function
Private Sub txtTitel_BeforeUpdate(Cancel As Integer)
If pruefeLeer(Me!txtTitel) = True Then
Cancel = True
Me!txtTitel.Undo
End If
End Sub
Viele Grüße und eine schöne Woche
Irene