access forumlier gegevensblad celwaarde op basis van formule

Status
Niet open voor verdere reacties.

Peer44

Gebruiker
Lid geworden
25 jan 2008
Berichten
224
Hallo,

ik heb een tabel opgebouwd met o.a. een id veld (1 t/m ........)
per regel moet de begin + eindtijd worden ingevuld

dit zijn de kolommen [begintijd] [eindtijd]

nu is de begintijd telkens hetzelfde als de eindtijd van de vorige regel (vorig ID veld)

De ingave gebeurd via een formulier in de gegevensblad weergave.

Hoe kan ik ervoor zorgen dat wanneer een nieuwe regel wordt aangemaakt hier de begintijd wordt overgenomen van de vorige eindtijd?
 
Het veld [Begintijd] kan dus gewoon weg... Waarom zou je dubbele informatie opslaan?
 
Kan wel zijn, maar dat is geen antwoord op de vraag. De begintijd kun je namelijk simpel met een query ophalen en in de 'layout' zetten. Vermijd dubbele gegevens als het even kan. Bovendien: als je gaat rotzooien in de tabel, dan kun je voor record 121 makkelijk een andere begintijd invullen dan in record 120 als eindtijd staat. Dubbele gegevens laten altijd de mogelijkheid voor corrupte (on niet-juiste) gegevens open. En dat zou je dus moeten vermijden. Zeker als dat technisch vrij simpel is. Ik neem overigens aan dat je een rapport of een formulier bedoelt :)
 
mee eens, heb geprobeerd dit nu via een query op te lossen.
layout is inderdaad een formulier en ook een rapport

Loop nu tegen het volgende probleem aan, er worden achteraf regels tussengevoegd waardoor de sortering op ID nummer niet meer correct is. (in chronologische volgorde)
is er geen "eenvoudige" weg om via vba de begintijd op te halen uit de bovenliggende regel?
 
Als je een datum/tijd veld gebruikt, en je vult hem met =Now(), dan heb je zowel datum als tijd in het veld staan. En die kun je dan sorteren. Het ID heb je dan niet nodig. Sla je alleen de tijd op, dan wordt het lastig, want je moet dan ergens ook een datum hebben om correct te sorteren.
 
Ik heb te weinig informatie verstrekt;

het gaat in dit geval om het invoeren van data achteraf, bijvoorbeeld vandaag wordt alle data van 3,4 en 5 dagen ingegeven.
de operator moet ongeveer 50 regels per dag ingeven, met daarin o.a. de begin en eindtijd.

de eindtijd is dus telkens de begintijd van de volgende regel, met uitzondering van de eerste regel en de laatste regel.
ik ben er tot nu toe nog niet aan uit hoe ik kan oplossen dat dit beide moet worden ingegeven, Ctrl C --> Ctrl V
:confused:
 
Ik heb te weinig informatie verstrekt;
het gaat in dit geval om het invoeren van data achteraf, bijvoorbeeld vandaag wordt alle data van 3,4 en 5 dagen ingegeven.
Maar dat is nog geen antwoord op de vraag of er ook een datumveld is of niet... Gezien de werkwijze lijkt mij dat noodzakelijk, maar ja...
 
In dat geval blijft het principe hetzelfde; aflopend sorteren op datum en op tijd, en het voorlaatste record is altijd goed. Ik doe er een voorbeeldje bij met Meterstanden. Principe is daar uiteraard hetzelfde; alleen is er in het voorbeeld één sorteerveld. Maakt voor de techniek niet uit.
 

Bijlagen

  • Lopende Totaal - meterstanden.rar
    45,9 KB · Weergaven: 25
En om een voorbeeldje te geven dat je zelf kunt ombouwen:
Tabel: tblTijden
Velden: RecID, Datum, Tijd
Query:
Code:
SELECT Datum, (SELECT TOP 1 Tijd FROM tblTijden AS T1 WHERE (T1.Datum = tblTijden.Datum) AND (T1.Tijd < tblTijden.Tijd) ORDER BY T1.Datum DESC, T1.Tijd DESC) AS VorigeTijd, Tijd
FROM tblTijden
ORDER BY Datum DESC , Tijd DESC;
Geen VBA, geen overbodige velden...
 
Mooi voorbeeld, gelukt om dit te implementeren in mijn database.:D

Heb je nog een idee hoe ik de begintijd voor het eerste record kan ingeven?
Het meest ideale zou zijn om:
De huidige database opent met een formulier waarin je de datum ingeeft waarvan je de data gaat ingeven.
Deze datum wordt vervolgens in het formulier gebruikt voor ieder nieuw record wat wordt toegevoegd

Als ik op het startformulier een zelfde functie heb voor de begintijd wat dan wordt overgenomen in de tabel enkel voor het eerste record uiteraard.
 
Je eerste record is in deze constructie per definitie de begintijd, en die heeft dus geen begintijd. Het tweede record is de eindtijd, en die kan dus een bijbehorende begintijd opzoeken. Ga je twee records op de aangegeven methode samenvoegen, dan zul je dus altijd vanaf het tweede record twee ingevulde velden zien, en heeft het eerste record een leeg veld. Wil je het eerste record (wat dus geen eindtijd is) niet zien, dan kun je de query filteren op het tijdveld.

Code:
SELECT Datum, (SELECT TOP 1 Tijd FROM tblTijden AS T1 WHERE (T1.Datum = tblTijden.Datum) AND (T1.Tijd < tblTijden.Tijd) ORDER BY T1.Datum DESC, T1.Tijd DESC) AS VorigeTijd, Tijd
FROM tblTijden
WHERE ((((SELECT TOP 1 Tijd FROM tblTijden AS T1 WHERE (T1.Datum = tblTijden.Datum) AND (T1.Tijd < tblTijden.Tijd) ORDER BY T1.Datum DESC, T1.Tijd DESC)) Is Not Null))
ORDER BY tblTijden.Datum DESC , tblTijden.Tijd DESC;
Je tweede vraag snap ik eerlijk gezegd niet...
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan