iif statement in query

Status
Niet open voor verdere reacties.

Tamara27

Gebruiker
Lid geworden
1 mrt 2010
Berichten
224
Beste

Ik heb een query die een aantal gegevens selecteert, afhankelijk van wat de gebruiker heeft aangeduid in een formulier.

De query doet het prima, behalve met de selectie "roker" heeft hij het moeilijk.
De gebruiker heeft hier 3 keuzes, Ja, Nee of Beide.
Ja en Nee gaan, bij de keuze Beide geeft hij enkel de rokers.

Zie bijlage voor opbouw query.

Statement voor rokers:
Code:
IIf([forms]![zoekformulier].[zoekRoker]="Ja";-1;IIf([forms]![zoekformulier].[zoekRoker]="Nee";0;([GegevensPatienten].[Roker]) Like "*"))

Iemand die de fout ziet?

MVG
 

Bijlagen

  • naamloos.JPG
    naamloos.JPG
    45,1 KB · Weergaven: 35
Dus als ik het goed versta, kan de gebruiker

1 filteren op rokers
2 filtere op niet rokers
3 filteren op rokers en niet rokers.

en wat met de - 1 en 0. Wat moet er staan bij het geval "beiden"
 
Inderdaad.
ofwel kiezen voor alle patiënten die roken
ofwel kiezen voor alle patiënten die niet roken
ofwel àlle patienten (zowel rokers als niet-rokers)

waarde "ja" geeft -1 (gebruik makend van checkboxen)
waarde "nee" geef 0
en waarde "beide" zou zowel 0 als -1 moeten zijn :-)
 
ik snap het niet zo goed met de informatie die ik nu heb.

Worden de gegevens in een tabel geplaatst na het aanvinken?
En wat is beiden? kan je dan gewoon geen derde checkbox maken, met beide, die dan value 3 geeft.

Want eerst filteren op ja en dan op nee is logisch (1 of 0) maar als het beiden is, en de waarde moet dan 0 en 1 zijn, dat is onmogelijk.
Of 1 OF 0, beide is niet mogelijk ...
 
Hoi Tamara,

Waarschijnlijk wil je ook filteren op het rokersveld als het niet is ingevuld. In welk geval je de filtering moet uitbreiden met Null.
Een Ja/Nee veld kan maar twee waarden bevatten: 0 of -1. Je kunt dus geen filtering maken met Like "*", want dat werkt alleen bij een tekststring, en die heb je niet.
Dus: de filtering uitbreiden met Roker=Null, en/of de filtering zo maken:
(Roker=0 OR Roker=-1 OR Roker=Null)
 
ik heb dus volgende code gebruikt:

Code:
IIf([forms]![zoekformulier].[zoekRoker]="Ja";-1;IIf([forms]![zoekformulier].[zoekRoker]="Nee";0;Null))

Maar dit gaat ook niet. Hij geeft dan enkel een leeg record en zou eig alle records moeten geven (zowel rokers als niet rokers... )

Het leek zo simpel ....
 
Je moet ook niet op Ja en Nee zoeken met de IIF; de waarden zijn rescpectievelijk -1 en 0.
IIf([forms]![zoekformulier].[zoekRoker]=-1;-1;IIf([forms]![zoekformulier].[zoekRoker]=0;0;Null))
 
En hoe moet ik dan mijn combobox opbouwen?
Nu bestaat de rijbron uit: "Beide" ; "Ja"; "Nee"
 
In het voorbeeldbestand dat ik van je heb is het rokersveld een Ja/Nee veld. De Weergave van een Ja/Nee veld kan je instellen, dus je hebt verschillende uitingsvormen van een ja/nee veld. "Waar/Onwaar", "Ja/Nee" zijn twee mogelijkheden bijvoorbeeld. Maar wat intern wordt opgeslagen, zijn dus de waarden -1 en 0. In een query kun je dan ook filteren op Waar, True, Ja, Yes, -1, en je zult altijd dezelfde uitkomst krijgen.
het heeft dus geen zin om in een query "Ja" te vervangen door -1. Tenzij je nu een Tekstveld gebruikt...
 
Oh jah, nu snap ik de verwarring :-)
Had er even niet bij nagedacht dat je al n voorgeschiedenis met mijn databankje hebt :-)

Dit betreft een nieuw formulier. Een Zoekformulier ipv een invoerformulier.

In dit formulier is Roker een combobox met 3 keuzes: "ja" , "nee" en "beide". Standaardwaarde is hier "beide" (lijkt me logisch)
Als ik geen criterium in mijn query zet is er geen probleem natuurlijk, maar aangezien roken toch een belangrijke factor is in de medische wereld... moet hier wel op geselecteerd kunnen worden
 
Yes babe, we go a long way.... ;)
Als je beide opties wilt kunnen selecteren, dan zou je het rokersfilter dus gewoon weg kunnen laten. Anders moet je in je vervolgproces de waarden gaan combineren:
([Roker]=-1 OR [Roker]=0) bijvoorbeeld
 
We gaan al n eindje, das waar :-)
Ma nu moet ik u toch teleurstelle denk k :( ik snap niet helemaal wat je bedoelt...

Mss ben ik ook niet helemaal duidelijk geweest.

Ik heb weer een onafhankelijk formulier. Door op de knop "zoek" te klikke wordt de query geactiveerd. In die query (zie ook bijlage van eerdere reacties) staat het criterium telkens als volgt: Like forms![zoekformulier].[zoekVeld] & "*". (Dit werkt allemaal!)

Voor de rokers, idem dito. Dit is een combobox met 3 keuzes (ja, nee, beide)
Als ik gewoon Ja of Nee kies, gaat het zonder probleem. Alleen de beide (als er dus eig geen criterium is) gaat niet.
Met die Null heb ik het geprobeerd, dat werkt niet...

Misschien begrijp ik jou ook fout?
 
Ik denk niet dat het gaat lukken via een vaste formulieraanroep. Met de IIF zet je namelijk altijd iets weg in het criteriumveld; en in jouw geval wil je dat dus nu niet. Zelf bouw ik de query dus meestal op bij de knop op het formulier, en wijs ik de te gebruiken SQL code na het opbouwen opnieuw toe aan de query. Ik vervang dus meestal de SQL code van de query via de knop. Daarmee voorkom je de (m.i.) nodeloos ingewikkelde criteriumregels in die query, en je kunt de query ook starten zonder dat het formulier open is. Wat in jouw geval uiteraard ook niet kan.
 
Ok, concreet gezien moet ik dus eig een SQL code opstellen om mijn query te vervangen?

Damn :-) Ik maak net queries omdat ik niet goed ben in die stomme codes :)
Is er een standaardje voor?
 
Je zou, als je toch alles via queries wilt doen, een extra query kunnen maken waarbij je niet filtert op het veld Roker. In de knop waarmee je de query laat uitvoeren zet je dan een IF Then Else op de keuzelijst, waarbij je in het geval van Ja Of Nee query 1 laat uitvoeren, met de filtering 0 en -1 (waarbij je dus in de query de IIF kunt gebruiken) en bij de keuze Beide laat je query 2 draaien.
 
:) We go a long way....
Als je de techniek die ik eerder beschreef eens wil uitproberen, mag je wel weer een versie mailen. Maak ik wel wat voor je!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan