Setfocus funktioniert nicht

Hallo,
ich möchte nur eine ganz einfache inhaltliche Feldprüfung machen, wie ich es aus x anderen Fällen gewohnt bin. Dazu prüfe ich im LostFocus eines Feldes, ob ein Eintrag mit dem Feldinhalt schon in der Datenbank ist. Ist das der Fall, soll der Cursor nach der Meldung wieder im betroffenen Feld stehen.

Leider steht der Cursor nach der Meldung, egal ob ich mit
Me.Feldname.SetFocus
oder
DoCmd.GoToControl „Feldname“
arbeite, immer in dem neu angeklickten oder mit Tab erreichten Feld.
Arbeitet Access hier irgendwie anders?

Mike

Hallo Mike,

ich möchte nur eine ganz einfache inhaltliche Feldprüfung
machen, wie ich es aus x anderen Fällen gewohnt bin. Dazu
prüfe ich im LostFocus eines Feldes, ob ein Eintrag mit dem
Feldinhalt schon in der Datenbank ist.

wie? zeig mal den Code!

Ist das der Fall, soll
der Cursor nach der Meldung wieder im betroffenen Feld stehen.

ok

Leider steht der Cursor nach der Meldung, egal ob ich mit
Me.Feldname.SetFocus
oder
DoCmd.GoToControl „Feldname“
arbeite, immer in dem neu angeklickten oder mit Tab erreichten
Feld.

bist du sicher, dass du noch auf dem selben Datensatz stehst?

Arbeitet Access hier irgendwie anders?

welche der 12 Versionen meinst du?

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)

Hi,
die Form ist leer, weil ja ein neues Teil erfasst werden soll.
Ich mache dan ein 2.Recordset auf, schaue nach ob die Nummer vergeben ist und gebe ggf. eine Nachricht aus. Dann will ich den Cursor wieder im Ausgangsfeld stehen haben. War nix.
Es tritt unter Access 2003 als auch unter 2007 auf.
(Die Punkt sind nur für die Lesbarkeit)

Mike

Private Sub Artikel_Nummer_LostFocus()
Dim DB As Database
Dim RS As DAO.Recordset
Dim bCancel As Boolean

If Trim$(Me.[Artikel-Nummer].Text) „“ Then
…Set DB = CurrentDb()
…strSQL = „SELECT * FROM Erzeugnisdaten WHERE [Artikel-Nummer]=’“ & Me.[Artikel-Nummer].Text & „’“
…Set RS = DB.OpenRecordset(strSQL)
…bCancel = (RS.RecordCount 0)
…RS.Close
…If bCancel Then
…'DoCmd.GoToControl „Artikel-Nummer“
…'Me.[Artikel-Nummer].SetFocus
…MsgBox „Artikelnummer schon vergeben“, vbExclamation, „Artikelnummerprüfung“
…'DoCmd.GoToControl „Artikel-Nummer“
…Me.[Artikel-Nummer].SetFocus
…End If
End If

End Sub

Hi,
die Form ist leer, weil ja ein neues Teil erfasst werden soll.
Ich mache dan ein 2.Recordset auf, schaue nach ob die Nummer
vergeben ist und gebe ggf. eine Nachricht aus. Dann will ich
den Cursor wieder im Ausgangsfeld stehen haben. War nix.
Es tritt unter Access 2003 als auch unter 2007 auf.
(Die Punkt sind nur für die Lesbarkeit)

Hallo,

schreib mal so:

Private Sub Artikel_Nummer_Beforeupdate(Cancel as Integer)
If Dcount("*",„Erzeugnisdaten“,"[Artikel-Nummer]=’" & Me![Artikel-Nummer] & „’“) > 0 Then
MsgBox „Artikelnummer schon vergeben“, vbExclamation, „Artikelnummerprüfung“
Cancel=true
End If
End Sub

Gruß
Franz, DF6GL

Funktioniert so, aber warum funzt setfocus nicht?
Ich mag irgendwie den accesseigenen Sonderkram nicht. Ich hatte erwartet, dass VB-Code funktioniert.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Funktioniert so, aber warum funzt setfocus nicht?
Ich mag irgendwie den accesseigenen Sonderkram nicht. Ich
hatte erwartet, dass VB-Code funktioniert.

Hallo,

lol, da verkennst Du aber was… Du(!) benutzt Access-Sonderkram… (–>Makros)

Also DCOUNT habe ich sonst noch nirgends gesehen VB aber schon öfter.
Was ist an VB-Code Makro?

Mike

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

Was ist an VB-Code Makro?

dieses:
DoCmd.GoToControl „Artikel-Nummer“

ist die Reinkarnation eines Makros…, wie fast alle Docmd-Geschichten.

Weiterhin sind die Lost-Focus, Got-Focus -Ereignisse mit Vorsicht zu geniesen, vor allem, wenn man in diesen Ereigniss(prozedur)en gleich wieder den Focus wechselt…

OK, das Docmd - was ausgesternt ist - hatte ich nur testweise eingebaut, weil das Lostfocus nicht ging und in einem anderen Sample mit Docmd gearbeitet wurde.
Klar, dass man bei den Focus-Ereignissen Ärger bekommen kann, aber ich hätte erwartet, dass die SetFocus-Methode wenigstens funktioniert, wenn es sie schon gibt.

Mike

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]