Wie kan mij helpen bij het invoeren van een functie/formule in een query??

Status
Niet open voor verdere reacties.

Japsur

Gebruiker
Lid geworden
9 apr 2004
Berichten
650
Daar was ik al weer. Nu voor mij een zeer moeilijke opgave.
Ik moet in 1 formule het volgende hebben:

1. ten eerste moet er onderscheid worden gemaakt tussen jongens en meisjes (ik heb een tabel met daarin geslacht)

2a. bij jongens: daar moet dan een formule ingevoerd worden.

2b. bij meisjes moet er dan weer onderscheid worden gemaakt tussen =< 1,40m of > 1,40m.

3a. Achter =< 1,40 komt dan weer een formule.

3b. bij > 1,40 komt dezelfde formule als bij =< 1,40.

De formule (bij jongens, meisjes =<1,40 en >1,40m) is overigens INT (A* SQRT(afstand) - B)
A en B zijn constanten en afstand is de variabele. (zie mijn eerdere vraag hiervoor). De constanten A en B zijn voor alle drie de categoriën verschillend. (ik weet niet of dit laatste wat uitmaakt) Hoe moet dit? Kan iemand mij vertellen hoe de formule eruit moet komen te zien?
Oh ja, de formule komt overigens in een selectiequery.

Groetjes Japsur
 
Maar dat is nu juist het probleem bij mij. Hoe maak je nu zo'n functie. Wanneer wel en niet een ;, ( ) enz. Als ik een formule ingevoerd heb geeft ie altijd een een of andere foutmelding. Ik ben (nog) niet thuis in het invoeren van formules in access (excel overigens ook niet zo). Kan iemand mij helpen?
 
Een functie maak je niet in een veld in een query maar in een moduleblad.Hierin kun je een code zetten die, afhankelijk van de waarde van de variabelen, een uitkomst maakt.Deze functie kun je dan vervolgens weer in een query gebruiken.Ik weet niet precies wat je wil maar ik kan wel iets voor je in elkaar zetten waar je mee verder kunt.Laat maar weten
 
Ik heb in access eens gekeken naar zo'n moduleblad. Ik snap hier werkelijk helemaal niets van. Het zou mooi zijn als je wat voor mij in elkaar kon zetten. Ik heb deze formule/module vaker nodig alleen voor totaal andere getallen en onderdelen. Maar als ik er 1 heb dan kan ik deze, lijkt mij, zo kopieren en wat aanpassen.

Ik zal zo goed mogelijk proberen het probleem uit te leggen:

Ik ben nu bezig met een programma aan het maken die van atletiekuitslagen (onderdelen, zoals hoogspringen, verspringen enz) van de prestatie de punten kan uitrekenen. De punten zijn dus afhankelijk van de prestatie.
Nu ben ik aanbeland bij hoogspringen.
De formule om het puntenaantal te berekenen is als volgt: INT (A * SQRT(afstand) - B). Bij de jongens is er geen probleem, want voor elke hoogte geldt deze formule. Bij de meisjes is er wel een probleem. Wanneer de prestatie =< aan 1,40m dan gebruik je andere waarden voor A en B dan wanneer het > 1,40m is.
De query is zo opgebouwd dat hij wel het onderscheid tussen jongens en meisjes kan maken, maar ik denk dat in deze formule/module wel iets moet zitten om hier onderscheid in te maken.
Even de waarden voor A en B
A B
Jongens:..............2440.0 2593.5
Meisjes:=<1,40m 3039.8 2981.5
Meisjes:> 1,40 m 2635.5 2501.5
(De punten omdat alles dan verschuift)

De waarden voor A en B heb ik in een tabel geplaatst. De link naar de tabel in de module zou je misschien aan kunnen geven door gewoon de waarden voor A en B daar in te vullen. (ik weet niet hoe je tabelwaarden in een module koppelt.
Ik hoop dat je nu een beetje mijn probleem begrijpt. Zo niet, laat maar horen.

(ik ben een analfabeet als het gaat om formules)
 
kun je mij wat verschillende voorbeelden geven met het resultaat van de berekening zodat ik even een check kan doen?
 
Ok is goed
vb
Jongen X springt 1,65m.
Puntenaantal wordt: Int (2440,0 * SQRT(1,65) - 2593,5) = 540 punten

Jongen Y springt 1,20m
Puntenaantal wordt: Int(2440,0 * SQRT(1,20) - 2593.5) = 79

Meisje X springt 1,35m.
Puntenaantal wordt: Int(3039.8 * SQRT(1,35) - 2981.5)
= 550 punten

Meisje Y springt 1,40m
Puntenaantal wordt: Int(3039.8 * SQRT(1,40) - 2981.5)
= 615 punten

Meisje Z sprint 1,50m
Puntenaantal wordt: Int(2635.6 * SQRT(1.50) - 2501.5)
= 726 punten.

Lukt het verder?

Als deze module werkt, kan ik dan hier het een en ander zelf in aanpassen zodat ik deze ook voor andere onderdelen kan gebruiken?

Japsur
 
Ja, je kan er nog van alles in aanpassen.Wat ik heb gedaan is een lege database met alleen de module met de functie erin gemaakt.Je moet het volgende doen
Importeer het module blad vanuit de database die ik meestuur.
Als je dat hebt gedaan is er een nieuwe functie beschikbaar, deze funktie heet resultaat en heet een aantal gegevens nodig om het resultaat te kunnen berekenen, als eerste het onderdeel in dit geval hoogspringen tussen dubbele quotes zetten daarna een komma en dan het geslacht jongen of meisje weer tussen dubbele quotes en als laatste het resultaat zonder quotes.als je alles goed hebt ingevuld dan geeft de functie als resultaat het resultaat, je kunt voor deze gegevens dus ook velden vanuit tabellen gebruiken.
 

Bijlagen

De module ziet er volgens mij goed uit, geen verstand van eigenlijk.
Ik heb het volgende gedaan. Ik ben naar mijn query gegaan waar hij het antwoord moet geven. In een nieuwe kolom heb ik de volgende formule staan:
Expr1: Resultaat("[Q_alle onderdelen_junioren AB_sub]![Hoogspringen] ";" [Q_alle onderdelen_junioren AB_sub]![CategorieID] ";[Deelnemers]![Hoogspringen])

Ik heb overigens jongen in de module veranderd in M want dat heb ik in het categorientabel staan.

Hij geeft geen fout aan, maar als ik in de tabel deelnemers bij hoogspringen een waarde invoer geeft ie in de query als resultaat 0. Dit kan natuurlijk niet. Doe ik nu nog steeds iets fout of ligt dat aan mij?

De query alle onderdelen_junioren AB_sub met cat. ID heb ik gejoind aan met categorientabel met daarin cat. ID. Daarin staat bij cat. ID 12 en 14 een M van mannelijk.
Ik begin er nu steeds minder iets van te vatten eigenlijk.

Bij de records waar ik in de deelnemerstabel geen waarde invul geeft ie als resultaat #FOUT aan.

Dit is naar mijn weten het enigste probleem waar ik tot nu toe mee zit om het gehele programma af te maken.

Sry dat ik je nog steeds lastig val, maar het is belangrijk voor mij.

Tot nu toe alvast bedankt
 
Als je velden uit een tabel gebruikt zijn de quotes niet nodig, wel moeten de velden van het type tekst zijn.dus in je eerste veld [Q_alle onderdelen_junioren AB_sub]![Hoogspringen] zou hoogspringen moeten staan als tekst, het tweede veld zou de waarde M of J moeten hebben ook weer als tekst, het lijkt er op dat jij hier het ID gebruikt en die is nummeriek, wissel deze waarde om voor het omschrijving veld van de categorie,de derde waarde is een nummeriek veld.Het feit dat er een 0 als waarde wordt berekend na invullen van een resultaat betekent dat de functie wordt gebruikt maar dat er geen waarde wordt berekend.

Ik heb ook een kleine afwijking geconstateerd in wat jij verwacht en wat de functie berekend (afronding) maar dat komt later wel.
 
Ik denk dat het wat gemakkelijker wordt als ik je de database even toestuur, het begint voor mij nu steeds raarder (is dit goed NL's?) te worden.

Het is een totale puinzooi in de db. Ik heb wat uit het oude programma gekopieerd wat niet wijzigde en het loopt allemaal wat door elkaar.
 
Ja, stom van mij, ik zie ut. Grr,

maar Jij ben GENIAAL, Bedankt!!!

Nu kan ik mijn programma afmaken!
 
Was ik al weer, Ik heb wat getest en nu kom ik er achter wanneer een meisje 1,40 springt de pc 1 punt minder aangeeft dan mijn rekenmachine. Is dit de afwijking die je bedoelde?

Voor de rest doet ie het goed! :D :D :D :D
 
Ja, de formule is nu zo dat er niet gekeken wordt naar de cijfers achter de komma maar alleen de cijfers voor de komma worden getoont. is dat ook de bedoeling??
 
Het is de bedoeling dat de formule INT het puntenaantal afkapt, dus als bijv. 135,45 punten er uit komt, dan is het puntenaantal 135 punten. Ook wanneer het puntenaantal 135,99 is, wordt het puntenaantal 135.

De module moet zo zijn dat wanneer er dus 1,40 wordt gesprongen hij het correcte aantal punten aangeeft en niet 1 punt te weinig.

Ik weet niet hoe het moet, maar kan in de module zoiets ingevoerd worden:
when 1,40 then INT(A*SQR(afstand)-B) +1, maar wel dat de andere 2 formules goed blijven??!!

Het probleem is dus nu dat ie verkeerd rekent op de een of andere manier. Hij rekent 614 punten uit voor 1,40 terwijl als je het in excel of op de rek.machine het doet er 615 punten uit moet komen. Voor de andere afstanden, dus 1,35 of bijv. 1,45 rekent hij wel correct.
 
Je bent geweldig, ik heb gezien wat je hebt veranderd, je hebt het in double veranderd. Ik zelf zou dit nooit hebben gevonden. Hij doet het nu goed!
Bedankt voor je hulp!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan