delen door nul-fout

Status
Niet open voor verdere reacties.

gonzo31

Gebruiker
Lid geworden
11 jan 2007
Berichten
143
Hallo,

De oplossing zal vast hel simpel zijn, maar ik zie 'em niet.

Ik heb een tabel waarin de kolom 'punten' alle waarde kan bevatten dus ook '0'. Echter, in de volgende kolom worden de punten omgezet tegen een waarde van 1000. (hoogste waarde is duizend en dan relatief aflopen).

Kort gezegt, als volgt: 1000/DMax([punten];"totaalpunten")*[punten] geeft een geïndexeerde waarde.

Maar als [punten] nu 0 is dan gaat het dus verkeerd. Want je kan niet delen door 0. Iemand de oplossing?

Vr. groet,
Arjan
 
doe je dat in een functie of in een query?
In een functie kan je erop testen met een if then statement. In een query doe je dat met een IIF statement.
Code:
1000/iif(DMax([punten];"totaalpunten")*[punten] =0;1000;DMax([punten];"totaalpunten")*[punten] )
Ipv ;1000; kan je ook ;null; proberen.

Komt erop neer dat als DMAX 0 oplevert, je dan deelt door 1000. het eindresultaat wordt dan 1.

HTH:D
 
hmm, beetje late reactie want het lag even stil aan deze zijde.

Inmiddels bovenstaande toegepast en dat was ook niet helemaal het gewenste resultaat. Na wat gepuzzel kwam ik op de volgende code:
Code:
IIf([punten]=0;0;1000/DMax([punten];"tbl_totaal")*[punten])
Goed: als 'punten' nul (0) is, dan geeft het als waarde 0. Dat moet ook.
Fout: Bij elk ander punten aantal geeft de code nu 1000.

VB.
punten......na script........zou moeten zijn
0..............0...................0
425..........1000..............1000
406..........1000..............955
410..........1000..............964
210..........1000..............494

Het lijkt dus of de DMax telkens van de te bereken 'cel' de DMax neemt en niet die van de kolom. Kan iemand hier wat mee? Ik blijf ondertussen ook puzzelen :confused:

Vr. groet

Arjan

[edit]tabelvorm toegepast. sorry voor het primitieve model.[/edit]
 
Laatst bewerkt:
Heb je al geprobeerd om er haken omheen te zetten?
Code:
IIf([punten]=0;0;(1000/DMax([punten];"tbl_totaal")*[punten]))

Als dat niet werkt dan heb ik toch aan sample database van je nodig, dat werkt een stuk eenvoudiger!

HTH:D
 
Ok, hier mijn bestand bijgevoegd.

Kleine uitleg:
de bijwerkquery 'qry_tempcalctotaal1' moet in de tabel 'tbl_totaal1' de kolom 'tot1-1' tot en met 'tot1-4' gaan invullen. Dit volgens de regels die ik hierboven heb beschreven. Mijn laatste bericht hier boven is het voorbeeld uit de kolom 'pnt3'.

Het is allemaal een beetje low-tech met zoveel queries e.d. maar ik ben nu eenmaal geen held in access. Hoop dat er iemand wijs uit kan worden.

Vr. groet

Arjan
 

Bijlagen

Arjan,

Ik heb even gekeken naar de functie die je gebruikt.
Deze heb ik even opeen formulier opengebroken zodat ik in ieder eld kon zien wat er gebeurt.
Als ik DMax() gebruik dan krijg ik iedere keer de zelfde waarde terug als [pnt3].
Als ik echter Max() gebruik dan krijg is ieder keer 425 terug en dat is ookwat je wilt.

Dus kijk daar een naar in je query. Ik heb dat niet meer gedaan.

Wim
 
Je moet je DMAX een beetje aanpassen.

Code:
DMax([pnt3],"tbl_totaal1")
moet worden:
Code:
DMax("pnt3","tbl_totaal1")
Je DMAX moet eigenlijk altijd dezelfde waarde weergeven. Dat doet-ie niet als je [pnt3] als input gebruikt.

Enjoy!
 
Super het werkt! :thumb: Inderdaad de [] vervangen door "". Bedankt voor de moeite!

Vr. groet,

Arjan
 
Hmmm,

Alles deed het goed. Totdat de hele kolom ,dus [pntx], een keer 0 was. Dan kan die ineens niet meer overweg met de iif functie
Code:
IIf([pntx]=0;0;1000/DMax("pntx";"tbl_totaal1")*[pntx])
Hij zou overal gewoon 0 moeten geven omdat de punten 0 zijn maar ergens wil de functie toch weer de 1000/enz. uitvoeren.

Ik heb al geprobeerd om in het criteria te zetten >0 zodat met alleen maar 0-len de functie niet uitgevoerd wordt maar dat werkt niet.

Hier iemand nog een oplossing voor?

Vr. groet,

Arjan
 
blijkbaar wordt het hele iif statement geevalueerd. Je moet nu
dat gedeelte wat mis dreigt te gaan met een iif opvangen zodat daar geen 0 uitkomt.
Code:
IIf([pntx]=0;0;1000[COLOR="Red"]/iif([/COLOR]DMax("pntx";"tbl_totaal1")*[pntx]=0,1,DMax("pntx";"tbl_totaal1")*[pntx]))
(even ronde haken tellen!)
Zo langzamerhand moet je eens gaan bedenken of je je code niet beter in een module kan zetten. IIF statements zijn erg traag en zoals je kan zien ook erg onleesbaar.

Enjoy!
 
Code:
IIf([pntx]=0;0;1000[COLOR="Red"]/iif([/COLOR]DMax("pntx";"tbl_totaal1")*[pntx]=0,1,DMax("pntx";"tbl_totaal1")*[pntx]))
Hiermee ga ik aan de slag.
Zo langzamerhand moet je eens gaan bedenken of je je code niet beter in een module kan zetten
Ja, daar zit een probleem. Daar heb ik geen kaas van gegeten. Dus voordat ik zo'n berekening kan maken moet ik eerst fatsoenlijk modules leren schrijven. Of kan ik daarvoor hier toevallig een vrijwilliger vinden ;)

Vr. groet,

Arjan
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan