in query veldwaarden uit het vorige record halen

  • Onderwerp starter Onderwerp starter AdvB
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

AdvB

Gebruiker
Lid geworden
1 jul 2021
Berichten
48
Goeiedag,\

Ik wil controle-report maken wat checkt of er overlap in verhuurperioden van een verhuurartikel zijn.
dat zou fysiek niet kunnen maar in mijn database wel :)

Wat ik dus wil:
veld toevoegen wat de [EINDDATUM] van het vorige record ophaalt
als de waarde van dat veld dan kleiner is dan [BEGINDATUM] huidig record heb ik onterechte overlap die ik wil tonen in rapport.

Probleem is dat ik dus geen functie kan vinden die uit vorige record een waarde haalt.


Alvast bedankt,

Ad
 
in een formulier/rapport kan je hiervoor de dmax functie gebruiken: dmax("EINDDATUM]";"Mijn tabel of query"; "EINDDATUM < #" naam controle-element einddatum op je formulier" & "#") of je kan natuurlijk ook zelf een functie schrijven in VBA.
Hou er rekening mee dat het "vorig record" in feite niet bestaat in een database. De volgorde waarin een recordset wordt getoond hangt volledig af van de ORDER BY.
 
Voorkomen is beter dan genezen…. I.p.v. een rapport waarin je controleert of er overlap is, moet je voorkomen dat er überhaupt geen overlap mogelijk is. En dat is niet zo moeilijk door de uit te lenen artikelen die zijn uitgeleend voor een bepaalde periode weg te filteren uit de lijst met artikelen die uitgeleend kunnen worden. Dus dát zou ik eerst maken. E.e.a. wordt in detail behandeld in de cursus Access in de handleiding.
 
@NoellaG. als ik goed lees haalt de dmax-functie de hoogste waarde op. Dat werkt volgens mij voor mij niet.
Stel ik heb voor 1 verhuurartikel de volgende 3 huurperiodes:

01-01 13-04
02-04 01-07
01-07 30-07

Dan wil ik dat het controle-report signaleert dat de startdatum van de tweede huurtermijn valt VOOR de einddatum van de vorige verhuurperiode
 
@AccessGuru. Dat heb ik ook afgevangen. Echter het verhuurformulier is later nog aan te passen, als dat een datum wordt gewijzigd zou er, met terugwerkende kracht, alsnog overlap kunnen ontstaan.
 
Dat zou je uiteraard moeten voorkomen :). Het is niet zo moeilijk om een check in te bouwen die controleert of de gekozen periode wel mogelijk is. Maar goed, dat ligt bij jou :). Het voorstel van noella zou m.i. inderdaad niet werken. Overigens is het best te doen; ik gebruik zelf een techniek om naar het 'vorige record' te kijken (technisch gezien heeft ze gelijk; een relationele database kent geen lineaire opslag) op basis van een subquery. Dat zie er dan ongeveer zo uit:
Code:
SELECT Meterstanden.Datum, Meterstanden.Water, (SELECT TOP 1 Water FROM Meterstanden AS T1 WHERE T1.Datum < Meterstanden.Datum ORDER BY T1.Datum DESC ) AS VorigWater, 
IIf([VorigWater] Is Null,0,[water]-[VorigWater]) AS [Verbruik Water], Meterstanden.Gas, (SELECT TOP 1 Gas FROM Meterstanden AS T1 WHERE T1.Datum < Meterstanden.Datum 
ORDER BY T1.Datum DESC ) AS VorigGas, IIf([VorigGas] Is Null,0,[Gas]-[VorigGas]) AS [Verbruik Gas]FROM Meterstanden
GROUP BY Meterstanden.Datum, Meterstanden.Water, Meterstanden.Gas
ORDER BY Meterstanden.Datum;

Daarbij breng je dus een ordening in de data (in dit geval op datum) en gebruik je een subquery om de waarde van de voorlaatste datum als veld in te lezen. Werkt prima. Wellicht kun je dit aanpassen aan je eigen situatie.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan