Neuigkeiten:

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

Mobiles Hauptmenü

Aktion "beim Verlassen" eines Formularfeldes

Begonnen von liederstern, September 08, 2021, 13:57:39

⏪ vorheriges - nächstes ⏩

liederstern

Hallo in die Runde,

ich nutze ein simples Formular mit 5 Feldern zur Erfassung von Daten.
Sobald Feld ("Anfänger") mit der tab-Taste verlassen wird, soll in der dahinter liegenden Tabelle die aktuelle Zeit ins Feld "Erfassungsdatum" geschrieben werden.

Die Prozedur steht im Ereignis "beim Verlassen" des Feldes Anfänger.
Private Sub Anfänger_Exit(Cancel As Integer)

'Debug.Print Me.ID
Debug.Print KeyCode
       
    If KeyCode = 9 Then
   
        'CurrentDb.Execute "UPDATE [Eckzahlen] SET [Eckzahlen].Erfassungsdatum = now() WHERE ((([Eckzahlen].ID)=" & Me.ID & ") AND (([Eckzahlen].Erfassungsdatum) Is Null));"
        Me.Erfassungsdatum = Now()
       
    End If
   
End Sub

Ich habe schon rumprobiert, aber keycode bleibt leer und folglich wird das Erfassungsdatum nicht geschrieben.
Grund der Kopplung an die tab-Taste ist der normale Ablauf der Erfassung.

Wo ist mein Gedankenfehler?
Ich danke Euch!
Viele Grüße,
Nicole

MzKlMu

#1
Hallo,
Du willst den Code im Ereignis "Beim Verlassen" ausführen, wozu soll da noch der Keycode notwendig sein ?
Das zusätzliche Abfragen des Keycodes ist daher überflüssig und funktioniert ohnehin nicht.

Ich würde hier das Ereignis "Nach Aktualisierung" des Formulars verwenden und zusätzlich prüfen ob ein neuer Datensatz vorliegt und das Feld auch nur dann schreiben.

Dass Now() auch die Uhrzeit speichert weißt Du ?
Das kann unter Umständen hinderlich sein.
Gruß Klaus

liederstern

Zitat von: MzKlMu am September 08, 2021, 15:15:44Du willst den Code im Ereignis "Beim Verlassen" ausführen, wozu soll da noch der Keycode notwendig sein ?
"Grund der Kopplung an die tab-Taste ist der normale Ablauf der Erfassung."

Zitat von: MzKlMu am September 08, 2021, 15:15:44Das zusätzliche Abfragen des Keycodes ist daher überflüssig und funktioniert ohnehin nicht.
Ok, dann ist das so.

Zitat von: MzKlMu am September 08, 2021, 15:15:44Ich würde hier das Ereignis "Nach Aktualisierung" des Formulars verwenden und zusätzlich prüfen ob ein neuer Datensatz vorliegt und das Feld auch nur dann schreiben.
Bringt mir nichts, da ich bei einigen Datensätzen nach Erfassung von "Anfänger" noch in ein anderes Formular verzweige.

Zitat von: MzKlMu am September 08, 2021, 15:15:44Dass Now() auch die Uhrzeit speichert weißt Du ?
Ja, stört aber nicht, da das Erfassungsdatum/-Zeit nicht weiterverarbeitet werden soll, sondern nur der Information dient.

Danke trotzdem für die Hilfe.
Viele Grüße,
Nicole

MzKlMu

Hallo,
wenn ein Code "Beim Verlassen" ausgeführt werden soll, so ist es doch egal, wie das Feld verlassen wird.
Egal, ob mit der Tab Taste oder mit der Maus.
Von daher ist es doch der Ablauf der Erfassung egal und die Abfrage der gedrückten Taste obsolet.

Wenn Du die Zeit beim Datum dabei hast, muss Du das aber immer im Hinterkopf haben, denn wenn auf dieses Feld die Vergleichsoperatoren (=, >, > Zwischen Und)  für z.B. eine Filterung anwenden willst funktioniert das möglicherweise nicht erwartungsgemäß.
Wenn die Zeit nicht benötigt wird, verwende besser Date()
Gruß Klaus

Beaker s.a.

Hallo Nicole,
Zitatda ich bei einigen Datensätzen nach Erfassung von "Anfänger" noch in ein anderes Formular verzweige.
Da musst du mit dem Exit-Event aber vorsichtig sein; - Zitat aus der OH
ZitatAnders als die Ereignisse GotFocus und LostFocus treten die Ereignisse Enter und Exit nicht ein, wenn ein Formular den Fokus erhält oder abgibt.
(bezieht sich in diesem Fall nur auf Exit/LostFocus)
Ein weiterer Stolperstein könnte sein, dass das Erfassungsdatum auch bei
bestehenden DS geändert wird wenn das Feld den Focus erhält und verlassen
wird. Deshalb würde ich auf NewRecord prüfen,
Private Sub Anfänger_Exit(Cancel As Integer)
'Debug.Print Me.ID
    If Me.NewRecord Then
        Me.Erfassungsdatum = Now()
    End If
End Sub
oder gleich, ganz ohne Code den Standardwert auf Now() setzen, - ein Erfassungs-
datum ändert sich ja nicht mehr.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)