Avatar billede kimsand Nybegynder
30. juni 2014 - 14:47 Der er 6 kommentarer og
1 løsning

Bruge en comboradio boks som kriterie for en boolean

Jeg er igang med at bruge en radio boks med 3 indstillinger som kriterie i en forespørgsel på et boolean felt.

Det er fordi jeg vil sætte brugeren i stand til at søge på aktive tilbud, passive tilbud og dem alle sammen.

Jeg har lavet et usynligt felt på formen der hedder sandfalsk, som jeg med kode opdaterer med værdierne -1,0,2

-1 for Sand
0 for Falsk
2 for det hele.

Så i kriteriefeltet laver jeg følgende kriterie

spørger efter -1, hvis sand sættes værdien -1, hvis falsk
spørger jeg efter værdien 0 hvis sand sættes værdien til 0, hvis falsk er det 2 og så skal der søges på alle der har 0 eller -1.

IIf([Forms]![FM_ret_i_tilbudskalenderen]![sandfalsk]=0;0;IIf([Forms]![FM_ret_i_tilbudskalenderen]![sandfalsk]=-1;-1;(([DT_tilbudskalender].[aktiv])=0 Or ([DT_tilbudskalender].[aktiv])=-1)))

Det virker med -1 or 0, men ikke med OR delen.

Hvis jeg kun har OR delen i kriteriet fuldstændig som det står her, virker det.

Er der nogen der har et bud på hvorfor. SQL er lang og ser sådan her ud..

SELECT DT_tilbudsbeskrivelse.navn, DT_tilbudskalender.dato, DT_tilbudskalender.starttid, DT_tilbudskalender.sluttid, DT_tilbudskalender.antalpladser, DT_tilbudskalender.antalbrugtepladser, DT_tilbudskalender.IDrum, DT_rum.navn, DT_tilbudsbeskrivelse.tilbudstype, DT_tilbudskalender.IDmedarbejder, DT_tilbudskalender.aktiv
FROM DT_tilbudstype INNER JOIN (DT_tilbudsbeskrivelse INNER JOIN (DT_rum INNER JOIN (DT_roller INNER JOIN ((DT_medarbejder INNER JOIN DT_tilbudskalender ON DT_medarbejder.IDmedarbejder = DT_tilbudskalender.IDmedarbejder) INNER JOIN ST_roller ON DT_medarbejder.IDmedarbejder = ST_roller.IDmedarbejder) ON DT_roller.IDrolle = ST_roller.IDroller) ON DT_rum.IDrum = DT_tilbudskalender.IDrum) ON DT_tilbudsbeskrivelse.IDtilbud = DT_tilbudskalender.IDtilbudsbeskrivelse) ON DT_tilbudstype.IDtilbudstype = DT_tilbudsbeskrivelse.tilbudstype
WHERE (((DT_tilbudskalender.dato)>=[Forms]![FM_ret_i_tilbudskalenderen]![fradato] And (DT_tilbudskalender.dato)<=[Forms]![FM_ret_i_tilbudskalenderen]![tildato]) AND ((DT_tilbudskalender.aktiv)=IIf([Forms]![FM_ret_i_tilbudskalenderen]![sandfalsk]=0,0,IIf([Forms]![FM_ret_i_tilbudskalenderen]![sandfalsk]=-1,-1,((DT_tilbudskalender.aktiv)=0 Or (DT_tilbudskalender.aktiv)=-1)))) AND ((DT_roller.rollenavn)="Underviser") AND ((DT_medarbejder.aktiv)=True))
ORDER BY DT_tilbudskalender.dato;
Avatar billede terry Ekspert
30. juni 2014 - 15:24 #1
Havent looked closely at your SQL but you have to remember that a Boolean can only have 2 values 0 or 1 (-1)
Avatar billede kimsand Nybegynder
30. juni 2014 - 15:30 #2
Yep I remember, but i want to be able to return...

-1 all the active
0 all the inactive
2 both.

In the query
Avatar billede kimsand Nybegynder
30. juni 2014 - 15:36 #3
Its the Where clause thats interesting... here it is

WHERE
(((DT_tilbudskalender.dato)>=[Forms]![FM_ret_i_tilbudskalenderen]![fradato] And (DT_tilbudskalender.dato)<=[Forms]![FM_ret_i_tilbudskalenderen]![tildato])
AND
((DT_tilbudskalender.aktiv)= IIf([Forms]![FM_ret_i_tilbudskalenderen]![sandfalsk]=0,0,IIf([Forms]![FM_ret_i_tilbudskalenderen]![sandfalsk]=-1,-1,((DT_tilbudskalender.aktiv)=0 Or (DT_tilbudskalender.aktiv)=-1)))) AND ((DT_roller.rollenavn)="Underviser") AND ((DT_medarbejder.aktiv)=True))
Avatar billede terry Ekspert
30. juni 2014 - 15:56 #4
All those () confuses my eyes :-)


Its VERY important where the parentheses are placed, specially when using OR.
Avatar billede kimsand Nybegynder
30. juni 2014 - 16:03 #5
hmm fandt ud af det, men er ikke sikker på hvorfor det virker..

istedet for dette her


IIf([Forms]![FM_ret_i_tilbudskalenderen]![sandfalsk]=0;0;IIf([Forms]![FM_ret_i_tilbudskalenderen]![sandfalsk]=-1;-1;(([DT_tilbudskalender].[aktiv])=0 Or ([DT_tilbudskalender].[aktiv])=-1)))

skrev jeg dette her


IIf([Forms]![FM_ret_i_tilbudskalenderen]![sandfalsk]=0;0;IIf([Forms]![FM_ret_i_tilbudskalenderen]![sandfalsk]=-1;-1;([DT_tilbudskalender].[aktiv]))

altså returnerede ikke nogen værdi ..... ?
Avatar billede terry Ekspert
30. juni 2014 - 18:14 #6
IIf([Forms]![FM_ret_i_tilbudskalenderen]![sandfalsk]=0;0;IIf([Forms]![FM_ret_i_tilbudskalenderen]![sandfalsk]=-1;-1;(([DT_tilbudskalender].[aktiv])=0 Or ([DT_tilbudskalender].[aktiv])=-1)))


What this says is


If sandfalsk = 0 Then 0

Else
    if sandfalsk = -1 Then 0

    else
    > Not sure if this is a logical expression (([DT_tilbudskalender].[aktiv])=0 Or ([DT_tilbudskalender].[aktiv])=-1))
   







IIf([Forms]![FM_ret_i_tilbudskalenderen]![sandfalsk]=0;0;IIf([Forms]![FM_ret_i_tilbudskalenderen]![sandfalsk]=-1;-1;([DT_tilbudskalender].[aktiv]))

What this says is


If sandfalsk = 0 Then 0

Else
    if sandfalsk = -1 Then 0

    else
      aktiv /(the value of)


So if the last version works then what why did you use (([DT_tilbudskalender].[aktiv])=0 Or ([DT_tilbudskalender].[aktiv])=-1))
   
? What were you trying to do?
Avatar billede kimsand Nybegynder
30. juni 2014 - 21:25 #7
I was trying to do this...

-1 all the active
0 all the inactive
2 both.

Witch should return either all the records with

Radio 1    active as true
Radio 2    active as false
Radio 3    active as either true or false
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester