Opgelost IIf in Quiries

Dit topic is als opgelost gemarkeerd
Status
Niet open voor verdere reacties.

RobertJB66

Gebruiker
Lid geworden
2 feb 2022
Berichten
219
Ik ben een Query aan het maken en daar zit een vergelijk in, maar alles wat ik doe er komt een foutmelding zelfs op de meest simple vorm.

Ik heb een kolom in een Query "sr" sr is het resultaat van een lastige berekening maar geeft een waarde van 127,3469672
Nu wil ik in een tweede kolom de wortel van deze waarde hebben.

Hiervoor doe ik WRTsr: IIf([sr]>0,Sqr([sr]),0)

Wat doe ik hier fout?
 
Ik snap niet waarom je hier een IIF gebruikt. Wat is er mis het de SQR van 0 trekken? Ben je bang voor de uitkomst? Ik zou banger zijn voor deze formule als je hem gebruikt bij records waar je een leeg veld hebt, want dan krijg je (uiteraard) een foutmelding. Die je dan weer prima kan opvangen:
Code:
WRTsr: IIf([sr] Is Null;0;Sqr([sr]))
Maar als je dus altijd getallen hebt, en er zitten berekeningen bij waar 0 uit komt, dan mag je daar best een worteltje of twee uit trekken. No problem!
 
Beste gek als ik deze code invul krijg ik als nog een fout melding.
"The expression you entered contains invalid syntax", "You omitted an operand or operator, you entered an invalid character or comma, etc.

Ook als ik de ";" vervang voor "," krijg ik deze zelfde fout melding alleen zonder de verwijzing naar de kommas.

"sr"is de kollom ervoor en die bestaat echt en geeft ook waardes.
 
Maar wat ben je dan aan het doen? En nogmaals: je kunt gewoon SQR(sr) gebruiken om een uitkomst te genereren, die óók voor de waarde 0 een keurige berekening maakt. Dus wat is je probleem?
 
Volgens mij kan je in een query niet verwijzen naar een berekend veld. Zet in plaats van sr de berekening van sr.
 
Volgens mij kan dat wel. Ik gebruik regelmatig berekende velden in vervolgberekeningen in een volgend veld. De IIf daarentegen die TS gebruikt op een getal veld geeft inderdaad een foutmelding. Maar is dus overbodig. Jammer dat TS daar niet op reageert, want we zitten weer (en niet voor het eerst) in het speculatie universum. Not my favorite spot…
 
Sorry voor het niet reageren even wat anders aan het doen.

Ik laat het voor nu maar rusten heb ook geen verklaring voor de foutmelding.

Bedankt voor de moeite.
 
Ik ook niet, maar ik wil eigenlijk weten waarom je in deze situatie überhaupt met een IIf wil werken als dat niet nodig is :).
 
Ik kom nog eens terug op dit onderwerp.

Om de een of ander reden wil de IIF niet werken in mijn Queries.

Ik heb een veld "Range" wat een getal bevat.
Nu wil ik graag via Conditioneel formatteren een Progressie balk in een formulier opnemen indien de waarde "Range" minder dan 100 is. Als de waarde meer dan 100 is dient de Progressie balk niet zichtbaar te zijn of in iedergeval niet gevuld te zijn.

In de Query geeft ik het volgenden in:

TBalk: IIF([Range]<=100,[Range],0)

Dit geeft een fout melding: The expression you entered contains invalid syntax. You may have entered a comma without a preceding value or indentifier.
 
In een query gebruik je (in Nederland) een puntkomma, geen komma. Kijk je in de SQL, dan zie je daar wél een komma staan. Dat kan verwarrend zijn. Dus je hebt twee varianten: Het SQL venster, en het Query ontwerp venster.
Code:
TBalk: IIf([Range]<=100;[Range];0)
voor het Ontwerpvenster, en in SQL:
Code:
IIf([Range]<=100,[Range],0) As TBalk
Als je een 'fout' maakt in een query, zet Access de cursor op de plek van die fout. In jouw geval dus op de eerste foutieve komma. Aangezien je er twee hebt, krijg je twee keer die foutmelding. En twee verschillende cursorposities.
 
OctaFish,

Dank je wel voor de snelle reactie.

Als ik de eerste variant ingeef dan krijg ik als nog een fout melding. Aangeven dat het een fout caracter is of een komma. In dit geval staat de cursor op de eerste puntkomma! Verander ik het weer in een komma dan staat de cursor op de tweede [Range].

Ook bij de tweede IIF methode krijg ik een fout melding waarbij de cursor op de tweede [Range] komt te staan.

Het lijkt net also mijn access geen IFF functie accepteert.

Geen idee of dit wel kan maar als ik de onderstaande ingeef krijg ik ook een foutmelding

Code:
X: IIF(30<60,10,0)

deze geeft ook een fout melding met de cursor op de eerste ;.

Code:
X: IIF(30<60;10;0)
 
Laatst bewerkt:
Soms krijg je foutmeldingen op doodgewone standaard functies, zoals Date() en IIf. Die 'fouten' komen dan helemaal niet door die gebruikte functies, maar door fouten die elders in de database zitten. Wat ik dan doe om dat uit te zoeken/op te lossen: kijken of er in de VBA module(s) een fout zit. Want dat is dan doorgaans de oorzaak.

Dus: ga (als je VBA hebt gebruikt) naar de VBA module (Alt+F11) en start daar <Foutoplossing>, <db compileren>. Zitten er fouten in de code, los die dan op (desnoods door de code tijdelijk om te zetten naar commentaar) net zo lang tot er niks meer gevonden wordt. Goede kans dat de IIf het dan weer doet.
Het behoeft uiteraard geen uitleg dat jouw laatste voorbeeld (de x formule) gewoon werkt bij mijn (gecontroleerde ;)) database.

Andere tip: maak even een nieuwe database, zet daar 1 tabel in en test daar de IIf functie. Geheid dat-ie werkt.
 
In feite heeft xps351 gelijk. In een SQL expressie kan je geen berekening maken met een ander berekend veld. Dit komt omdat elk onderdeel (FROM, WHERE, SELECT, ORDER BY) als één geheel wordt uitgevoerd. Dus als le sr: (berekening) uitvoert en dan in dezelfde query een veld aanmaakt fld1: berekening op sr, dan bestaat het veld sr nog niet als je er een berekening meedoet.
Ook Octafish heeft gelijk: In Access heeft Microsoft daar iets rondgebouwd zodat je dat wel kan doen, alleen loopt dat wel eens mis bij zeer complexe berekeningen. Dat kan je opvangen door eerst een query te maken met de complexe berekening en daarop je eindquery te baseren. Of je kan die complexe berekening ook in het tweede veld volledig uitschrijven. Maar dan moet in je query deze twee keer uitgevoerd worden wat de snelheid niet ten goede zal komen.
 
Of Peter, of ik heb gelijk: het kan, of het kan niet. Ik leef, of ik ben dood. Een beetje van beiden, hoe aanlokkelijk wellicht ook, kan niet. Dus ofwel je kan verwijzen naar een berekend veld in een query (en ik heb dat talloze malen gedaan). Of het kan niet (Peter heeft dat dus nog nooit gedaan, vermoed ik). Of het verstandig is, is hier niet ter sprake.
 
Of Peter, of ik heb gelijk: het kan, of het kan niet.
We hebben allebei een beetje gelijk. Je kan in een expressie inderdaad (zoals in het voorliggende geval) verwijzen naar een ander berekend veld.
In de WHERE clause van een query kan je echter niet verwijzen naar een berekend veld. Bijvoorbeeld bij het toevoegen van WHERE sr>2, krijg je een popup waarin om de waarde van sr wordt gevraagd.

Feit blijft dat het een heel bijzondere situatie is waarin TS verzeild is geraakt. Je zou hem bijna om een voorbeelddatabase vragen.
 
@peter: je haalt er zaken bij waar TS het niet over gehad heeft (de WHERE clausule) dus die moet je er in deze ook niet bij betrekken. Het kan gewoon. leg je daar bij neer :). En al helemaal omdat de vraag hier m.i. helemaal niet over gaat. Laten we de antwoorden binnen de scope van de vraag houden, dat is al lastig genoeg.

En laat TS eens reageren op mijn tips, dan weten we meer. Voorlopig ga ik er vanuit dat er een fout in één van de procedures zit. Maar ja, zolang er niet gereageerd wordt, zie ik geen noodzaak om dat zelf nog wél te doen.
 
Check in de VBA omgeving Tools -> References, waarschijnlijk een missing reference
 
Dat zou één van de uitkomsten kunnen zijn van de procedure die ik in #12 al heb beschreven. Die melding krijg je overigens alleen als er inderdaad een (gebruikte) bibliotheek in de lijst staat die, bijvoorbeeld door een upgrade naar een andere versie, of een andere laptop, niet meer bestaat. Die fout krijg je niet als je een procedure hebt gemaakt waarvoor een bibliotheek nodig is, waarvan de bibliotheek niet is aangevinkt, maar wél bestaat.

Mijn methode haalt dus alle 'fouten' er uit, ook die van de missende én ontbrekende bibliotheken. De opmerking van noella voegt dus niet zoveel toe aan de foutopsporing. Kan uiteraard geen kwaad om dat eerst te checken, want dat scheelt dan weer een klein beetje tijd :).
 
Ik ben toch nog maar eens aan het testen gegaan.
Het resultaat blijft het zelfde. ik blijf de foutmelding krijgen op de IIf functie in de query.

Ik heb een nieuw database gemaakt met 1 tabel.
dan een query gekoppeld aan de tabel.

De functie in de query is
Code:
IIF([Waarde]<=20,"Lager","Hoger")

Er is geen VBA code gebruikt.

Zie bijgesloten voorbeeld.
 

Bijlagen

Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan