PDA

Vollständige Version anzeigen : Wenn-Funktion in einer Abfrage liefert falsche Ergebnisse


MSchauch
21.11.2003, 10:27
Hallo Leute!

Ich habe ein Problem, dass ich nicht wirklich nachvollziehen kann. Ich versuche es mal zu beschreiben:

Ich habe eine Abfrage, in der die Daten abhängig von einer Wenn-Funktion ausgewählt werden. Dieses Prozedere habe ich schon oft angewandt; bis jetzt ohne Probleme und immer zielführend.

Heute habe ich das mal wieder probiert und die Abfrage macht nur murks.
Konkret: Das Feld, über das die Datensätze eingeschränkt ausgewählt werden, ist numerisch (mögliche Werte: 0,1,2,3,4,5). Abhängig von einer Option, die der Anwender ein oder ausschalten kann, soll im aktivierten Zustand dieser Option alles ausgewählt werden, welches der Bedingung >0 entspricht. Im anderen Fall soll die Bedingung >=0 sein.
Um dies zu realisieren, habe ich als Kriterium des betroffenen Feldes folgende Wenn-Anweisung eingebaut:

=Wenn(DomWert("Option1";"Tbl_Option")=Wahr;>0;>=0)

Vom Papier her muss diese Synthax funktionieren. Access gibt aber ein nicht korrektes Ergebnis aus. Wenn ich als Bedingung die Kriterien >0 oder >=0 ohne Wenn-Konstrukt eingebe, läuft alles richtig. Also muss es an der Wenn-Bedingung liegen. Nur leider bin ich der Meinung, das da kein Fehler ist!!!!!!!!

Hinzugefügt:
Mir ist gerade aufgefallen, dass das Konstrukt funktioniert, wenn man die Vergleichsoperatoren weglässt. Die scheinen das Problem zu sein!

Die einzige Antwort, die ich mir zusammengeschustert habe, ist die, dass es bei numerischen Vergleichen eventuell Probleme gibt, da all meine bisherigen Konstrukte auf Stringfeldern basiert haben.

Ich wäre für jeden Tip dankbar, der dieses Verhalten korrigiert oder zumindest eine Erklärung liefert, warum es nicht funktioniert.

Grüße,
MSchauch

kama
21.11.2003, 10:41
Hallo

Wenn(DomWert("Option1";"Tbl_Option";"Hier Fehlt eine Bedingung ")=Wahr;>0;>=0)

sonst bezieht sich das ja auf alle werte in Options

holpos.dz
21.11.2003, 10:42
Hallo MSchauch,

sollte in einer Wenn-Funktion die Bezugsgröße nicht in eckigen Klammern
stehen? also:=Wenn(DomWert[Option1];[Tbl_Option]=Wahr;>0;>=0)

versuchs mal...

MSchauch
21.11.2003, 10:45
Original geschrieben von kama
Hallo

Wenn(DomWert("Option1";"Tbl_Option";"Hier Fehlt eine Bedingung ")=Wahr;>0;>=0)

sonst bezieht sich das ja auf alle werte in Options

Das stimmt, wenn in der Tabelle Optionen mehrere Datensätze vorhanden sind. Allerdings gibt es dort bei mir nur einen Datensatz mit den entsprechenden Optionsfeldern. Die Bedingung bei DomWert kann also leer bleiben.
Trotzdem Danke!

MSchauch
21.11.2003, 10:47
Original geschrieben von holpos.dz
Hallo MSchauch,

sollte in einer Wenn-Funktion die Bezugsgröße nicht in eckigen Klammern
stehen? also:=Wenn(DomWert[Option1];[Tbl_Option]=Wahr;>0;>=0)

versuchs mal...

Ne, da sonst eine Fehlermeldung erscheint.
T

kama
21.11.2003, 10:51
Versuchs mal

mit -1 statt Wahr

MSchauch
21.11.2003, 10:59
Also, hier nochmal kurz meine weiteren Erfahrungen:

Der Fehler liegt nicht im Bereich der Dom-Wert Funktion. Der zu holende Wert wird einwandfrei an die Abfrage überliefert.

Ausprobiert habe ich dies durch

=Wenn(DomWert("Option1";"Tbl_Option")=Wahr;0;1)

Diese Bedingung funktioniert einwandfrei.

Wenn ich aber wieder auf

=Wenn(DomWert("Option1";"Tbl_Option")=Wahr;>0;>=0)

umstelle, werden nicht alle Datensätze ausgeben, auf die der entsprechene Wahr- oder Falsch-Ausdruck paßt. Es muss irgendwie an den Vergleichsoperatoren liegen. Die mag wohl die Abfrage nicht. Ich habe mal spaßeshalber >0 mit Zwischen 1 und 5 ersetzt. Hat auch nicht funktioniert.

Ich bekomme langsam eine Krise! Warum ist das so?

Trotzdem schon einmal Danke für die Antworten!

kama
21.11.2003, 11:05
Un das
Wenn(DomWert("Option1";"Tbl_Option")=Wahr;">0";">=0")

MSchauch
21.11.2003, 11:08
Original geschrieben von kama
Un das
Wenn(DomWert("Option1";"Tbl_Option")=Wahr;">0";">=0")

Dann kommt der Fehler "Datentypen in Kriterienausdruck unverträglich"

Arne Dieckmann
21.11.2003, 11:15
Hm. Wie sieht die SQL-Ansicht denn aus? Ich denke, dass es ein Problem ist, dass man so einfach nicht lösen kann (aber evtl. anders).

In SQL sieht das bestimmt so aus

FELD=IIF(Dlookup() ...;>0;>=0)

als Resultat steht dann dort (je nachdem, was WENN liefert):

FELD=>0

bzw.

FELD=>=0


FELD= ist praktisch fix in der SQL-Ansicht verankert ...

MarioR
21.11.2003, 11:50
Hallo,

der Operatur gehört nicht in die Wenn-Funktion:

>=Wenn(DomWert("Option1";"Tbl_Option");1;0)

oder auch

>=-DomWert("Option1";"Tbl_Option")

kama
21.11.2003, 12:16
@MarioR

Erfüllt das >= nicht nur eine seiner Bedingung?

MarioR
21.11.2003, 12:34
@kama

>0 ist für mich das Gleiche wie >=1 (zumindest bei ganzen Zahlen)