Calculatie veld geeft verkeerde uitkomst

Status
Niet open voor verdere reacties.

PCK01

Nieuwe gebruiker
Lid geworden
12 nov 2021
Berichten
4
Ik ben een query aan het maken met gegevens uit diverse tabellen.
Een deel van deze gegevens bestaat uit getallen die verkregen zijn uit keuzelijsten.
In de velden van de query staan de juiste getallen, maar als ik een calculatie veld maakt, en ik deel deze getallen met elkaar, is de uitkomst niet wat ik verwacht.
De berekening gaat namelijk uit van de gegevens uit de ID-kolom, ik wil echter gegevens uit de volgende kolommen hebben.

Mijn vraag:

Is er een expressie of iets dergelijks, waarbij ik de waarde uit de naast gelegen kolom kan gebruiken in de formule.

Voorbeeld:

ID getal1
1 100


IDindex getal 2
2 50

berekening:

[getal1]/[getal2]= 2 (dit zou b.v. het antwoord moeten zijn)

maar de volgende berekening wordt gemaakt:

[ID]/[IDindex]= 0,5
 
Heel simpele oplossing: als je getallen uit keuzelijsten haalt, dan zit daar vermoedelijk een tabel achter. Zet die tabel óók in de query, en gebruik dus de getallen uit die tabel.
 
Post anders eens een voorbeeld bestand, dan kunnen we je gemakkelijker op de juiste weg zetten.
 
Hierbij het bestand.

Het komt op het volgende neer:

Tabel T00-invul: vul ik de basis gegevens in, in dit geval, haal ik de laatste indexID op via een keuzemenu (relatie T01-bouwkostenindex).
Tabel T01-bouwkostenindex: hierin staan de indexen.
Tabel T-Test: Hierin ga ik de werken zetten, en zet ik de indexOID via een keuzemenu (relatie T01-bouwkostenindex) op de index van het project.

Nu wil ik een Query (Q-Test) maken, waarbij ik de prijzen indexeer naar de laatste IndexID.
Zoals je, in de meegeleverde database kan zien, worden de indexen (IndexID en IndexOID) getoond.
Als index, zou je de volgende uitkomst verwachten:

IndexID/IndexOID = 127,27/103,5 = 1,23

Maar de uitkomst wordt:

ID (IndexID)/ID(IndexOID) = 13 / 25 = 0,52
 

Bijlagen

  • PCK.zip
    23,8 KB · Weergaven: 14
Hoi,

eerst en vooral zou ik de opzoek combobox uit je tabellen verwijderen. Dit is niet alleen verwarrend, maar vertraagt de database ook. Dan zie je da waarden die er echt staan. De waarden die je nodig hebt moet je via de relaties in je query gaan opzoeken. Een voorbeeld van een oplossing kan je hier vinden:
 

Bijlagen

  • PCK2.zip
    28,3 KB · Weergaven: 11
Tabel T00-invul: vul ik de basis gegevens in, in dit geval, haal ik de laatste indexID op via een keuzemenu (relatie T01-bouwkostenindex).
Laten we eens beginnen met twee hoofdregels bij goed database ontwerp:

1. Gebruik nooit keuzelijsten in tabellen, tenzij op basis van Lijst met waarden.
2. Leer regel 1 uit je hoofd!

Keuzelijsten (met invoervak) gebruik je op Formulieren, maar niet in een tabel. Daar wil je de feitelijk opgeslagen waarden zien. Het eerste wat ik doe als ik een database van een TS open, is in de tabellen/queries de keuzelijsten terugzetten naar Tekstvakken. Omdat ik de opgeslagen waarden wil zien. Want dát zijn de waarden waar je mee rekent. Ik mag hopen dat je met formulieren werkt, en niet rechtstreeks in tabellen.

Daarmee is dát probleem verholpen, want je berekening klopt dus: je deelt door 25 en niet door 103,5.

Nu wil ik een Query (Q-Test) maken, waarbij ik de prijzen indexeer naar de laatste IndexID.
Deze zin klopt niet, ofwel je werkt er verkeerd mee. Je laatste IndexID is niet 13, maar 36. En je laatste IndexDatum (lijkt mij een logischere keuze) is 1-12-2021 (ID 24). De indexdatum van ID 13 is 1-1-2021, dus dat komt niet in de buurt van 'laatste index'. T00-Test bevat overigens maar één record, en dan krijg je uiteraard ook maar één uitkomst. Omdat je één brontabel in twee tabellen gebruikt, kun je de berekening nooit met jouw query maken. Daarvoor moet je de tabel T01-bouwkostenindex twee keer koppelen. Probeer deze query maar eens:

PHP:
SELECT [T-Test].Werknummer, [T-Test].Project, [T-Test].IndexOID, idx_Test.Index AS T_Index, [T00-invul].IndexID, idx_Invul.Index AS I_Index, Round([I_Index]/[T_Index],6) AS [Index]
FROM [T01-bouwkostenindex] AS idx_Test INNER JOIN [T-Test] ON idx_Test.Id = [T-Test].IndexOID, [T00-invul] INNER JOIN [T01-bouwkostenindex] AS idx_Invul ON [T00-invul].IndexID = idx_Invul.Id;
 
Goedemorgen AccessGuru,

Bedankt voor de wijze les, ik ben inmiddels verder, mede dankzij jullie inbreng.
 
Iets aangepast, maar het werkt naar behoren.
Nogmaals bedankt.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan