Jag har en accessfråga i en databas som hämtar sina villkor från en kombinationsruta i ett formulär. Standardvärdet i kombinationsrutan är "*" vilket gör att alla poster som överhuvudtaget har ett värde i denna kolumn kommer med när "*" väljs. Väljer man ett visst värde i kombinationsrutan, t ex "Grönbo" kommer självklart bara de poster med som uppfyller villkoret. - Så långt är allt gott och väl. Jag säger SQL, SQL, SQL... Det är grejer. Tack för svar Andreas! (Ursäkta att jag inte hunnit svara tidigare) ANVÄND INTE OOM! Hur gör jag istället om jag inte använder OOM - IIf? Jag behöver ju en snabb och enkel funktion för användaren att kunna växla mellan att ibland få med null och ibland inte. Detta kommer dessutom att behöva göras på flera fält, SQL-frågan är ganska komplex, olika urvalskriterier på fälten och dessutom med null på en del fält och utan null på andra fält... Just det. "Glömde" att jämförelser med null blir null. Så om du gör om det bör mitt uttryck fungera: Problemet är löst!Problem med operator i OOM funktion i accessfråga
Så här ser villkoret ovan ut i QBE-rutnätet:
SOM [Formulär]![frmUppdatering].[cboOmrådenamn]
Men, ibland vill man också ha med (eller inte ha med) nullvärden vilket enkelt skall kunna väljas, t ex med en kryssruta. DET ÄR DETTA SOM ÄR MITT PROBLEM. Jag har byggt på villkoret i QBE-rutnätet ovan och då använt mig av en OOM funktion, som i och för sig fungerar bra. Min tanke är att en kryssruta (vid sidan av kombinationsrutan) skall kunna påverka om nullvärden skall tas med eller inte. När kryssrutan är ibockad har den värdet -1 annars värdet 0. "-1" betyder att nullvärdena i det här fallet också skall tas med och "0" betyder att de inte skall tas med.
Så jag testade följande villkor i QBE-rutnätet:
SOM OOM([Formulär]![frmUppdatering].[chkNullOmrådenamn]=-1;[Formulär]![frmUppdatering].[cboOmrådenamn] ELLER Är Null;[Formulär]![frmUppdatering].[cboOmrådenamn])
Problemet med OOM funktionen ovan är att när kryssrutan är ibockad kommer inte en enda post fram. När däremot den inte är ibockad så fungerar allt som det är tänkt - inga nullvärden tas med utan bara det som uppfyller villkoret i kombinationsrutan. Således kan OOM funktionen inte hantera operatorer. Den kan bara hantera villkor såsom varande ett strängvärde.
Är det någon som har ett förslag till lösning?Sv: Problem med operator i OOM funktion i accessfråga
Uttrycket borde se ut så här i SQL:
WHERE ([Forms]![frmUppdatering].[chkNullOmrådenamn] AND Områdenamn IS NULL) OR Områdenamn = [Forms]![frmUppdatering].[cboOmrådenamn]
Där JAg antar att namnet på kolumnen är områdenamn.Sv:Problem med operator i OOM funktion i accessfråga
Helt rätt att namnet på kolumnen är områdenamn. Men tyvärr kvarstår mitt problem. Tittar man hur SQL-koden ser ut så fungerar det utmärkt att använda följande del av WHERE villkoret:
Like ([tblOmråden].[OMRÅDENAMN])=[Formulär]![frmUppdatering].[cboOmrådenamn] Or ([tblOmråden].[OMRÅDENAMN]) Is Null)
Men mitt problem är att användaren enkelt vill kunna välja när man önskar få med nullvärden eller inte få med nullvärden. Jag använder då en OOM funktion (som skrivs som IIf i SQL-koden). Användaren kan sedan styra OOM funktionen genom en att kryssa i en ruta eller eller inte kryssa i. Nedanstående SQL-kod fungerar tyvärr inte (trots att Access gjort den själv från QBE-rutnätet). Jo, IIF funktionen fungerar i de fall man inte har rutan för nullvärden ikryssad. Min slutsats är att operatorn IS NULL inte trivs i en OOM funktion. Jag har även testat med andra operatorer som < och > (givetvis för numeriska fält) och dessa fungerar inte heller.
Nedan är den kod som jag tycker borde fungera men som tyvärr inte gör det:
Like IIf([Formulär]![frmUppdatering].[chkNullOmrådenamn]=-1,([tblOmråden].[OMRÅDENAMN])=[Formulär]![frmUppdatering].[cboOmrådenamn] Or ([tblOmråden].[OMRÅDENAMN]) Is Null,[Formulär]![frmUppdatering].[cboOmrådenamn]))
Kan man välja ett helt annat tillvägagångssätt?Sv: Problem med operator i OOM funktion i accessfråga
Finns inget behov av det i ditt fall.
Det skall räcka med:
[tblOmråden].[OMRÅDENAMN]=[Forms]![frmUppdatering].[cboOmrådenamn] Or ([Forms]![frmUppdatering].[chkNullOmrådenamn] AND [tblOmråden].[OMRÅDENAMN] Is Null)
Du bör oxå använda forms istället för formulär i dina SQL frågor. Samt IIF istället för OOm. Annarsk ommer din appalikatione inte fungera på andra språkversioner av access.
JAg rekomenderar dig att utveckla dina applikationer i en engelsk version. Då du slipper dessa problem.Sv:Problem med operator i OOM funktion i accessfråga
Att använda Forms mm köper jag!
/AndersSv: Problem med operator i OOM funktion i accessfråga
("" & [tblOmråden].[OMRÅDENAMN])=("" & [Forms]![frmUppdatering].[cboOmrådenamn]) Or ([Forms]![frmUppdatering].[chkNullOmrådenamn] AND [tblOmråden].[OMRÅDENAMN] Is Null)Sv:Problem med operator i OOM funktion i accessfråga
Istället för att använda OOM har jag en serie frågor som körs med hjälp av VBA-kod.
Den allra första frågan ser till att rensa en nyligen gjord tabell, tblRapportunderlag. Sedan körs en tilläggsfråga som lägger alla posterna enligt det urval som man gjort för tillfället i tabellen tblRapportunderlag, här är ALLA nullvärden medtagna. Därefter körs eventuellt ytterligare frågor för att, om man önskar, ta bort poster med nullvärden i vissa fält. Om frågan körs eller inte avgörs ifall det är en bock eller inte i kryssrutan "Tag med null" för det fältet.
Tack för dina svar Andreas, det hjälpte mig att tänka!