none
Feld-Gültigkeitsregel funktioniert nicht - bug entdeckt? RRS feed

  • Frage

  • Hallo zusammen

    ich nutze die Gültigkeitsregeln ganz gerne, um grobe Plausibilitätsprüfungen abzufangen.

    Jetzt wollte ich für ein Feld (nennen wir es mal A) folgende Bedingung umsetzen:
    META: Es ist kein Wert erlaubt oder, wenn ein Wert angegeben wird, muss dieser größer als 0 sein.

    Folglich habe ich als Gültigkeitsregel folgende Bedingung eingetragen:

    IstNull([A]) Oder ((Nicht IstNull([A])) Und [A]>0)


    Doch es wird fälschlicherweise der Wert "0" zugelassen!? (sonst passt es)

    Obwohl die die Ausgabe der Einzelbedingungen 0 ODER (-1 UND 0) ergibt. Und bei 0 (Falsch) dürfte der Wert doch nicht akzeptiert werden und die MessageBox sollte doch eigentlich kommen.

    Oder kann mir das Verhalten jemand plausibel erklären? Denkfehler?

    Vielen Dank!


    (verwendet wird Access 16.0.10363.20015 x64)
    Freitag, 7. August 2020 22:08

Antworten

  • Hallo Michael,

    Also wenn ich das richtig verstanden habe soll deine Bedingung True/-1 ergeben wenn die Zahl "A" größer und ungleich "0" ist. Dann wäre die Formel  ((Nicht IstNull([A])) Und [A]>0)


    Sonntag, 9. August 2020 12:21

Alle Antworten

  • Hallo Michael,

    ich bin nicht so der Access Profi, daher nur ins Blaue geraten:

    Ist das Feld überhaupt numerisch? Wenn das ein alphanumerisches Feld ist, muss man den Wert für numerische Operationen vorher evtl. in eine Zahl umwandeln.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Samstag, 8. August 2020 08:09
    Moderator
  • Hallo Michael,

    ich bin nicht so der Access Profi, daher nur ins Blaue geraten:

    Ist das Feld überhaupt numerisch? Wenn das ein alphanumerisches Feld ist, muss man den Wert für numerische Operationen vorher evtl. in eine Zahl umwandeln.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Klar, sollte jeder (hoffentlich) jeder mit einem Datentyp Zahl oder Währung nachvollziehen können.
    Sonntag, 9. August 2020 10:01
  • Hallo Michael,

    Also wenn ich das richtig verstanden habe soll deine Bedingung True/-1 ergeben wenn die Zahl "A" größer und ungleich "0" ist. Dann wäre die Formel  ((Nicht IstNull([A])) Und [A]>0)


    Sonntag, 9. August 2020 12:21
  • Funktioniert tatsächlich! *erstaunt*

    Hast Du auch noch eine Erklärung parat? ;) 

    Bei Deiner Schreibweise sollte man meinen, dass dafür keine leeren Felder zulässig sind. Sind sie aber! Warum auch immer. Bissl unlogisch, oder?

    PS: Dann genügt auch einfach die Gültigkeitsregel [A]>0 einzutragen.
    Sonntag, 9. August 2020 18:24
  • Es ist im background so logisch, dass es wieder unlogisch ist ;)

    IstNull([A]) => ergibt bei "0" und "leerem Feld" =>TRUE => also läuft das ding schon bei "0" durch.

    ((Nicht IstNull([A])) Und [A]>0) => Nicht IstNull([A] ist in [A]>0 enthalten, also erfüllt [A]>0 alleine die Bedingung. 

    Also ganz Kurz: 0 entspricht 0 | leeres Feld entspricht 0 => wir wollen somit alles was größer 0 ist => [A]>0


    Sonntag, 9. August 2020 19:23

  • Bei Deiner Schreibweise sollte man meinen, dass dafür keine leeren Felder zulässig sind. Sind sie aber! Warum auch immer. Bissl unlogisch, oder?

    Null wird über die Eigenschaft "Eingabe erforderlich" gesteuert. Steht da "Nein", ist Null erlaubt.

    Gruss - Peter


    Mitglied im www.dbdev.org
    Access-FAQ: www.donkarl.com


    Sonntag, 9. August 2020 20:15
    Moderator