Hallo, mir fehlt scheinbar ein Operator.
Ich möchte formularseitig sofort prüfen, ob im Feld "Sorter" (indiziert, ohne dub) eine Zahl eingegeben wird, die bereits im Feld vorhanden ist. Damit möchte ich verhindern, dass der Benutzer eine graue Fehlermeldung bekommt, sondern eine weiße, wobei die Eingabe zurück gesetzt wird.
Im Netz habe ich folgenden Code gefunden und für mich angepasst:
If DCount("*", "tblBuerorechtBlock101", "Sorter = " & Me.Sorter) > 0 Then
MsgBox "Positionssnummer bereits vorhanden!", 48, "Positionsnummernfehler"
Me.Sorter.Undo
Cancel = True
End If
Wenn jetzt der User die Eingabe ganz rückgängig macht und das Feld leert, kommt der Fehler: "3075 Operator nicht vorhanden"
Was ist im Code zu ergänzen bzw. hat jemand einen anderen, vielleicht eleganteren oder komfortableren Code aus einer eigenen DB?
Carl
Hallo,
in welcher Ereignisprozedur steht der Code?
Was ist eine "graue" Fehlermeldung?
ZitatIf DCount("*", "tblBuerorechtBlock101", "Sorter = " & nz(Me!Sorter,0) ) > 0 Then
Ersetze halt Me!Sorter im Fall von NULL durch eine Wert, der nicht vorkommen kann..
Ja, es ist eine graue Fehlermeldung und er öffnet den Debugger.
Was heißt, im Fall von null ersetzen?
If DCount("*", "tblBuerorechtBlock101", "Sorter = " & nz(Me!Sorter,null) ) > 0 Then
?
Carl
Hallo,
Du sollst nicht in meinen Vorschlag die "0" durch "null" ersetzen....
Du sollst meine Codezeile unverändert bei Dir einsetzen und schauen, ob das das Problem löst.
Der VBE meckert deshalb, weil bei einem "leeren" Textfeld (das bekanntlich ja NULL, also nichts, nada enthält ) das Textfeld datentechnisch gar nicht existiert, also nicht vorhanden ist und dadurch Dein Code wie folgt vom VBE gesehen wird:
If DCount("*", "tblBuerorechtBlock101", "Sorter = " & ) > 0 Then
Also solltest Du versuchen die nz()-Funktion anzuwenden, die im Fall von NULL (siehe oben) einen realen Wert zurück liefert, mit dem die VBE dann zurechtkommt und Dcount syntaktisch zufrieden gestellt ist.
Hallo Carl,
Mal eine Frage, - willst du die Sortnr. jetzt vom User manuell erfassen lassen?
Dann gib ihm doch wenigstens die nächste Nummer schon mal vor.
Ausgehend davon, dass von 1 hochgezählt wird
Private Sub Form_Current()
With Me
If .NewRecord Then
.Sorter = .Recordset.RecordCount +1
End if
End With
End Sub
gruss ekkehard
Hallo,
eigentlich nutzt man dafür die DefaultValue-Eigenschaft....
Hallo Franz,
Ja, natürlich, mein Vorschlag resultiert aus einer persönlichen Abneigung gegen
Ausdrücke im Steuerelementinhalt.
gruss ekkehard
Für Querdenker: Man könnte auch Zahlen mit einer z.B. 1.000-er Schrittweite einsetzen. Möchte man da einen Datensatz z.B. auf den 5. Platz einordnen, könnte man auf einen Wert ändern, der sich zwischen jenen Werten der Nachbarn befindet. Zwischen 4.000 und 5.000 liegt also z.B. 4.507.
Eine solche Maßnahme könnte man ggf. alleine der Intelligenz des Users überlassen, ohne weitere Prüfungen.