Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Pflichtfeld bei "falscher" Änderung automatisch wieder mit Ursprungswert belegen

Begonnen von Else, Juli 10, 2015, 11:54:46

⏪ vorheriges - nächstes ⏩

Else

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

el_gomero

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

Gruß
Jürgen


Hilfe nach bestem Wissen, ohne Anspruch auf Richtigkeit und Vollständigkeit.
*feedback erwünscht*
Bitte Tipps lesen

DF6GL

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.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

MaggieMay

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.
Freundliche Grüße
MaggieMay

DF6GL

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Else

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