anoniem Geplaatst: 25 januari 2002 Delen Geplaatst: 25 januari 2002 Ik heb een query die de scores uitrekent, ja nog steeds voor de sportdag :wink: Maar ik had de waarde opgelost dacht ik maar, ik zit nu met het probleem dat als er bij een onderdeel wat om een tijd vraagt een 0 wordt ingevoerd dan krijg ik een score boven de honderd (omdat 0 niet bij het minimum wordt gerekend) Maar het probleem is dus die scores boven de honderd terwijl ze alleen recht hebben op een score 0. Ik reken de score dynamische uit door gebruik te maken van het minimum en maximum en zo komt er dus altijd een score tussen de null en honderd uit. En als die null waarde uit sluit dan sluit ik die speler helemaal uit en dat mag niet. Ik wil dus nu dat getal wat hoger is dan honderd vervangen door een null, ik heb namelijk een query aan het einde die de score's importeert en de namen erbij zet en als ik daar dan een soort van replace functie in kan plaatsen is mijn probleem opgelost. Quote Link naar reactie
anoniem Geplaatst: 25 januari 2002 Auteur Delen Geplaatst: 25 januari 2002 Hoi Wat ik uit je verhaal kan opmaken weet ik twee opties: 1. een if functie(in vba gewoon if en in expression builder iif). Ik zal expressionvoorbeeld nemen: [code:1:2403c3ca06] IIF(tijd=null;tijd=null;je orginele berekening) [/code:1:2403c3ca06] 2. een if die na je berekening de waarde boven de honderd eruit filterd: [code:1:2403c3ca06] IIF(waarde>100;waarde=null;waarde=waarde) [/code:1:2403c3ca06] Ik hoop dat je hier wat aan heb. Succes StruiS Quote Link naar reactie
anoniem Geplaatst: 25 januari 2002 Auteur Delen Geplaatst: 25 januari 2002 Als je toch aan het querien bent: UPDATE tabel SET tijd = Null Where tijd > 100; Quote Link naar reactie
anoniem Geplaatst: 25 januari 2002 Auteur Delen Geplaatst: 25 januari 2002 Dat is inderdaad veel simpeler. Maar ik denk wel dat het beter is om de null waarden er eerst uit te halen, dat scheelt weer wat snelheid. Maar als dat geen rol is zou ik inderdaad voor de update query gaan. StruiS Quote Link naar reactie
anoniem Geplaatst: 25 januari 2002 Auteur Delen Geplaatst: 25 januari 2002 Hij heeft er nog geen zin in, kan ik met een bijwerk query ook een query bijwerken? Zo nee, dan heb ik een probleem want mijn 'tabel' waarin de scores nu staan is eigenlijk een query? Quote Link naar reactie
anoniem Geplaatst: 25 januari 2002 Auteur Delen Geplaatst: 25 januari 2002 Een select-query is slechts een venster naar (een) tabel(len). Die scores zitten dus eigenlijk gewoon in de tabel die de query raadpleegt. Die tabel moet je dus ook updaten. Dat verhaal over die scores is me een beetje te vaag, maar het ziet ernaar uit dat je eerst die update-query moet uitvoeren om de waarden-boven-100 null te maken en daarna die score-importeer-query... Quote Link naar reactie
anoniem Geplaatst: 26 januari 2002 Auteur Delen Geplaatst: 26 januari 2002 Nou mijn tabel bevat dus gewoon de waarde, die uit de prestaties van de leerlingen afkomstig zijn. Voor de 400m en de sprint komt er een tijd uit en voor de rest een afstand. Bij die tijd heb ik het probleem dat er bij een waarde 0 een te hoge score uitkomt en dat moet ik dus tegen zien te gaan. Maar ik verander geen tabel ik maar gebruik van een query waarin ik de score's omreken. Quote Link naar reactie
anoniem Geplaatst: 26 januari 2002 Auteur Delen Geplaatst: 26 januari 2002 Het lukt nou ik moet alleen vier keer op ja klikken voor hij iets doet. Eerst de query naar een tabel schrijven en daarna nog eens de waarde wijzigen en het lijkt er nog op dat ik voor allebij de waarde een aparte update query nodig zal hebben. Is daar wat aan te doen. Quote Link naar reactie
anoniem Geplaatst: 26 januari 2002 Auteur Delen Geplaatst: 26 januari 2002 Volgens mij haal je null en 0 een beetje door mekaar, maar goed. Wat je nu doet is je hebt een oplossing bedacht voor het gevolg van je probleem. Beter is natuurlijk een oplossing voor het probleem zelf. Zoals ik het zie heb je dus een soort tabel Resultaten(Speler, Afstand, Tijd). Je hebt verder een query om de scores uit te rekenen. Hoe je dat precies doet is me nog steeds niet duidelijk, maar als het veld Tijd niet ingevuld is (null) of op 0 is gezet (de leerling heeft niet gelopen?) dan klopt de uitkomst van je score niet. Oplossing zoeken in de berekening van de score (rekening houden met null en 0) of het veld Tijd eerst zodanig aanpassen dat de berekening wel het gewenste resultaat geeft, bijv. veld Afstand en veld Tijd op 0 zetten, dus eerst een UPDATE-query uitvoeren en daarna pas de scores uitrekenen. Quote Link naar reactie
anoniem Geplaatst: 26 januari 2002 Auteur Delen Geplaatst: 26 januari 2002 Hij staat standaard al op 0 en niet op null. De score reken ik uit met de volgende query: SELECT leerlingen.volnaam, ((100-Int((leerlingen.sprint-sprint.min)/((sprint.max-sprint.min)/99)+0.5)))AS sprint, ((100-Int((leerlingen.[400 m]-[400m].min)/(([400m].max-[400m].min)/99)+0.5))) AS 400m FROM leerlingen, sprint, 400m; En min is het minimum waarbij 0 wordt uitgesloten. Quote Link naar reactie
anoniem Geplaatst: 27 januari 2002 Auteur Delen Geplaatst: 27 januari 2002 Oke, ik zie dat leerlingen.sprint de variabele is en als die onder het minumum zakt is de uitkomst hoger dan 100. Als je de uitkomst dus 100 wil hebben, dan moet je eerst alle sprint-velden die kleiner zijn dan het minimum gelijkstellen aan het minimum. Wil je die leerlingen als uitkomst 0 geven, dan moet je die sprint-velden aan het maximum gelijkstellen. Quote Link naar reactie
anoniem Geplaatst: 27 januari 2002 Auteur Delen Geplaatst: 27 januari 2002 Als ik hem gelijk stel aan de maximum score dan krijg ik als puntenaantal 1, dus ik moet het gelijkstellen aan de maximumscore + ??. Maar dat zal dus met een update query moeten, en dan krijg ik weer het probleem dat hij toestemming vraagt en ik wil het volledig buiten de gebruiker om laten gaan, want de gebruikers hebben een zeer beperkte computer kennis. [edit] Is dit mogelijk? [/edit] [ Dit Bericht is bewerkt door: mvwinger op 2002-01-27 19:14 ] Quote Link naar reactie
anoniem Geplaatst: 28 januari 2002 Auteur Delen Geplaatst: 28 januari 2002 Lang zoeken heeft het volgende opgelevert het is mogelijk, door het volgende programma fragment: [code:1:df4601ce03]With DoCmd // schakel de waarschuwing uit .SetWarnings False // open de query die gedefineerd is .OpenQuery soort // update de score haal er dus de getallen boven de honderd uit .OpenQuery ("update sprint") .OpenQuery ("update 400m") // update de totaalscore want die is veranderd. Moet beter kunne maar is niet van belang .OpenQuery ("update totaal") // Open nu het rapport, in preview. .OpenReport ("Eind scores"), acViewPreview // zet de waarschuwingen weer aan. .SetWarnings True End With[/code:1:df4601ce03] Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen