Kasboek, query

Status
Niet open voor verdere reacties.

DWGVDWGV

Gebruiker
Lid geworden
28 nov 2014
Berichten
20
Hallo allemaal, ik ben nieuw op dit forum.
Ik bedank iedereen dit geweldige forum heeft opgezet, ik heb er al veel aan gehad.

Ik heb een klein probleempje, met een query, zelf al veel nagekeken maar kom er even niet uit
het moet iets simpels zijn alleen weet ik even niet hoe.

Wellicht kan iemand mij helpen:

Ik heb een kasboekje in de bijlage bijgesloten, hier staat een beginsaldo op (dit moet blijven voor latere correcties)
verder reken access alles prima uit, tot aan het saldo gaat alles naar wens, maar dan komt er een nieuwe record en
daar gaat mijn probleem over, ik zou graag willen dat bij een volgend record het nieuwe saldo word overgenomen.

Ik hoop dat het duidelijk is en dat iemand mijn even kan helpen.

groet,
Dave
Bekijk bijlage Kas.zipBekijk bijlage Kas.zip
 
Ik snap je tabel niet; waarom een veld Beginwaarde? Is helemaal niet logisch om dat zo te doen, want het is geen eigenschap van je records. Hooguit een waarde in het eerste record dat je zou aanmaken. Verder zitten er nogal wat berekeningen in die je in een query zou moeten maken (BTW bijvoorbeeld is afhankelijk van een ander veld, en zou dus niet in de tabel thuishoren. Daarnaast zijn bedragen exact wat het zijn: bedragen. En die horen dus thuis in één veld, en niet in 2 zoals jij doet. Hooguit kun je een keuzelijst erbij zetten waarin je het type boeking aangeeft (factuur, ontvangen, afschrijving etc). waarna je in een query de totalen kunt berekenen.
Om te laten zien hoe je de vorige waarde ophaalt uit een tabel, heb ik een voorbeeldje gemaakt op basis van meterstanden. Kun je zien hoe de berekening er uit ziet.
 

Bijlagen

Hoi Octafisch,

Ik begrijp je punt, en ik heb daar voorlopig mijn reden voor om het zo te doen, wat betreft beginwaarde
Ik weet dat btw e.d. beter in een Query berekend kunnen worden, maar momenteel kies ik daar niet voor.

Super bedankt voor je reactie en voorbeeld, ik zou super geholpen zijn als jij mij jou string kan uitleggen, dan kan ik
leren wat je gedaan hebt en waarom, als je deze string voor mij kan splitsen (uitleggen wat er gebeurd, zo super zijn)
in rood aangegeven wat ik niet begrijp en in groen wat ik begrijp.
VorigWater: (SELECT TOP 1 WaterFROM Meterstanden AS T1 WHERE T1.Datum < Meterstanden.Datum ORDER BY T1.Datum DESC )
 
Het is niet zo'n lastige query om te snappen. Wat je doet is een extra query invoegen in het veld die één waarde uit een tabel ophaalt.
1. SELECT TOP 1 Water FROM Meterstanden AS T1.. Hiermee leg je vast dat je één record uitleest. (verander je Top 1 naar Top 10, dan haal je 10 records op, laat je Top # weg, dan zie je alles). De tabel krijgt een Alias, omdat je een criterium uit de tabel maakt op basis van een veld uit de tabel, en uit de kopie van de tabel. De kopie moet daarom een unieke naam hebben. Ik gebruik hier T1, maar je mag elke naam gebruiken.
2. WHERE T1.Datum < Meterstanden.Datum ORDER BY T1.Datum DESC. Hier wordt de vergelijking gemaakt. Je wilt het voorlaatste record hebben, en dat is het record waarbij de datum uit de kopie kleiner is dan de datum van het record waar je de formule in hebt gezet. Om die reden sorteer je ook aflopend op het veld Datum, want je wilt de hoogste datum bovenaan staan.

Dus samengevat: je maakt in de veldquery een kopie van de tabel met gegegevens, hier Meterstanden. Daarin laat je alle datums zien die kleiner zijn dan de datum van het actieve record. Kijk je naar een tabel met 50 records, en je staat in het eerste record van je hoofdquery, dan vallen er dus 49 records in de kopie tabel, want van die 49 records is de datum kleiner dan de datum van het eerste record. (nogmaals: we sorteren aflopend op datum). Sta je in record 25, dan zitten er in de veldquery dus 24 records; de overige records hebben een datum die groter is of gelijk aan de datum het het record. Omdat je in zo'n veldquery altijd één waarde mag hebben, moet de query worden teruggebracht naar één record. En dat doe je met TOP 1. Dat is ook prima, want het eerste record bevat de waarde die je wilt zien; de rest is niet interessant.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan