Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: KonradR am November 11, 2023, 11:45:15

Titel: beim wechsel in nächsten Datensatz funktioniert "Form.SetFocus" nicht
Beitrag von: KonradR am November 11, 2023, 11:45:15
Hallo liebe Accessfreunde,

ich habe ein Formular mit mehreren Textfeldern, die einen Datensatz befüllen.
Wenn ich in den nächsten Datensatz wechsle, möchte ich, dass der Inhalt eines bestimmten Feldes, es hört auf den Namen "txtrezepMenge", geprüft wird. Wenn in dem Textfeld nichts steht, dann soll eine Eingabe erzwungen werden, bevor ich in den nächsten Datensatz wechseln kann. Mein bisher entwickelter Code sieht so aus:
Private Sub txtrezepMenge_Exit(Cancel As Integer)
    If IsNull(Me!txtrezepMenge) Then
        MsgBox "bitte die Anzahl der Rezepte in Feld 'Anz./Rez.' eingeben"
        Me!txtrezepMenge.SetFocus
    End If
End Sub

Die MsgBox wird zwar angezeigt, aber der Datensatzzeiger wechselt in den nächsten Datensatz und das betreffende Textfeld erhält nicht den Fokus. Wie kann ich ereichen, dass das Textfeld "txtrezepMenge" den Fokus erhält und ein Datensatzwechsel nicht möglich ist, solange nichts im Textfeld steht?
Titel: Re: beim wechsel in nächsten Datensatz funktioniert "Form.SetFocus" nicht
Beitrag von: Beaker s.a. am November 11, 2023, 11:57:38
Hallo Konrad,

Falsches Ereignis, - verwende "Vor Aktualisierung".
Die Prozedur zu diesem Event (txtrezepMenge_BeforeUpdate) bietet den
Parameter "Cancel" an. Wenn du den bei leerem Feld auf True setzt
Cancel = Truewird die Prozedur abgebrochen, es wird nicht gespeichert und das Feld
wird gar nicht erst verlassen. SetFocus entfällt dann.
Damit kannst du auch auf falsche Eingaben prüfen, und mit
Me.txtrezepMenge.Undogleich wieder löschen.

gruss ekkehard
Titel: Re: beim wechsel in nächsten Datensatz funktioniert "Form.SetFocus" nicht
Beitrag von: KonradR am November 11, 2023, 12:10:49
Zitat von: Beaker s.a. am November 11, 2023, 11:57:38Falsches Ereignis, - verwende "Vor Aktualisierung".
Die Prozedur zu diesem Event (txtrezepMenge_BeforeUpdate) bietet den
Parameter "Cancel" an. Wenn du den bei leerem Feld auf True setzt
Code [Auswählen] Erweitern
Cancel = True

Hallo  Beaker s.a.,

danke für deine Antwort. Ich habe meinen Code gemäß deinen Empfehlungen angepasst. Beim Ereignis "..._BeforeUpdate" wird einfach der Datensatz gewechselt, ohne das was passiert. Jetzt habe ich für das Ereignis "..._Exit" den Parameter Cancel auf True gesetzt (Cancel = True) und es funktioniert. Hier noch mein Code der funktioniert:
Private Sub txtrezepMenge_Exit(Cancel As Integer)
    If IsNull(Me!txtrezepMenge) Then
        MsgBox "bitte die Anzahl der Rezepte in Feld 'Anz./Rez.' eingeben"
        Cancel = True
    End If
End Sub

Das mit dem Parameter war die Lösung. Danke für deine Hilfe.
Titel: Re: beim wechsel in nächsten Datensatz funktioniert "Form.SetFocus" nicht
Beitrag von: MzKlMu am November 11, 2023, 13:36:29
Hallo,
hast Du nur das eine Pflichtfeld ?

Im Regelfall nimmt man zur Datenvalidierung das Formular Ereignis "Vor Aktualisierung" (Form_BeforeUpdate) und prüft dort alle Felder. Bei einem Fehler wird mit Cancel=True abgebrochen.
Und dann gibt es nur eine Meldung.
Titel: Re: beim wechsel in nächsten Datensatz funktioniert "Form.SetFocus" nicht
Beitrag von: Beaker s.a. am November 11, 2023, 17:27:53
Hallo Konrad,

Wahrscheinlich hast du einfach nur im Code das "Exit" durch
"BeforeUpdate" ersetzt. Das bekommt das Steuerelement aber
nicht mit. Da musst du im Entwurfsansicht die Eigenschaft
"Vor Aktualisierung" manuell auf "Ereignisprozedur" einstellen.
Wenn du Steuerelement und Prozedur aus den beiden Dropdowns am
oberen Rand des Modulfensters auswählst wird das autom. eingefügt.

gruss ekkehard
Titel: Re: beim wechsel in nächsten Datensatz funktioniert "Form.SetFocus" nicht
Beitrag von: KonradR am November 25, 2023, 10:58:48
Hallo Beaker s.a.,

Zitat von: Beaker s.a. am November 11, 2023, 17:27:53Wahrscheinlich hast du einfach nur im Code das "Exit" durch
"BeforeUpdate" ersetzt. Das bekommt das Steuerelement aber
nicht mit. Da musst du im Entwurfsansicht die Eigenschaft
"Vor Aktualisierung" manuell auf "Ereignisprozedur" einstellen.
Wenn du Steuerelement und Prozedur aus den beiden Dropdowns am
oberen Rand des Modulfensters auswählst wird das autom. eingefügt.

Wahrscheinlich wars so. Jetzt habe ich den Code für das Ereignis "BeforeUpdate" eingefügt und in den Eigenschaften "Ereignisprozedur" ausgewählt und es klappt auch.
Titel: Re: beim wechsel in nächsten Datensatz funktioniert "Form.SetFocus" nicht
Beitrag von: KonradR am November 25, 2023, 10:59:43
Hallo MzKlMu,

Zitat von: MzKlMu am November 11, 2023, 13:36:29hast Du nur das eine Pflichtfeld ?

Danke für den Tip. Aber ich habe nur das eine Pflichtfeld.