Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Duplikate formularseitig verhindern

Begonnen von Carl, Januar 12, 2020, 13:28:10

⏪ vorheriges - nächstes ⏩

Carl

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

DF6GL

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..
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

Carl

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

DF6GL

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.
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

Beaker s.a.

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
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)

DF6GL

Hallo,

eigentlich nutzt man dafür die DefaultValue-Eigenschaft....
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

Beaker s.a.

Hallo Franz,
Ja, natürlich, mein Vorschlag resultiert aus einer persönlichen Abneigung gegen
Ausdrücke im Steuerelementinhalt.
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)

ebs17

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.
Mit freundlichem Glück Auf!

Eberhard