Weekstaat

Status
Niet open voor verdere reacties.

jverkerk

Terugkerende gebruiker
Lid geworden
12 nov 2009
Berichten
1.716
Office versie
Microsoft 365
Hallo,
Ik volg het project van OctaFish dus ben ik ook maar aan iets begonnen.
Ik ben hier nog niet zo vaak geweest, maar ik heb een vraagje om verder te kunnen, zou iemand in mijn weekstaat iets kunnen maken dat het totaal van de uren in de tabel terecht komt via het formulier of via een querie zodat ik kan zien hoe dat werkt ivm formule's of afhankelijkheden. Ben er al een poosje mee bezig. Zie weekstaat.
 

Bijlagen

Als je er ook een 2003 variant van kan maken, kan ik er wel even naar kijken.
 
Bedankt OctaFish,
Ik kan haast niet wachten op de volgende nieuwsbrief.
Hierbij de variant in 2003.
 

Bijlagen

Totalen moet je niet opslaan. Zoals Octafish in de nieuwsbrief heeft aangegeven moet je de gegevens normaliseren. Zodanig dat er geen afhankelijkheden in een tabel staan. Een totaal is een afhankelijkheid. Het is immers de som van twee of meer velden. De totalen laat je zien m.b.v. een query. Zo is een totaal ook niet te updaten maar geeft de query altijd het juiste totaal aan. De afzonderlijke velden waaruit een totaal is opgebouwd zijn natuurlijk altijd te wijzigen.

HTH:D
 
Het zal je niet verbazen als het antwoord een beetje voorloopt op de cursus ;)
Je kunt je vraag oplossen met queries, maar dat lijkt mij in dit geval meer werk opleveren voor de gebruiker (extra knoppen en zo) dan nodig is, dus daarom heb ik een voorbeeldje gemaakt met een eenvoudige functie die het totaal berekent, en vervolgens invult op het formulier. Het idee erachter is eigenlijk simpel: je kunt een tekstvak op een formulier maar één keer toewijzen. Dat kan een object zijn, zoals een tabelveld, of een formule, zoals je zelf ook gemaakt hebt. Echter, gebruik je een formule, dan kun je de berekening niet meer opslaan. Wil je een waarde opslaan, dan kun je weer geen formule gebruiken. Da's een vicieuze cirkel waar je dus niet uitkomt.
Vandaar dat we de berekening in dat soort gevallen laten uitvoeren op het formulier, en niet in het tekstvak zelf. Met VBA kun je de berekening dus wel degelijk maken. Of je berekeningen wel of niet opslaat, is niet zo zwart-wit als Guus zegt. Als je in je berekening bijvoorbeeld gebruik maakt van gegevens die aan fluxuaties, zoals prijzen, is het wel degelijk zinvol om in een tabel (denk aan bestellingen) ook berekeningen op te slaan; je wilt in dat geval niet dat een bestelling of offerte ineens een nieuwe totaalprijs krijgt... Daarom dus dat ik in je voorbeeld de berekeningen toch heb gekoppeld aan wat velden.
 

Bijlagen

Guus, hartelijk bedankt voor het advies, het is zoals Michel zegt niet altijd zo zwart wit.
De uren die je gewerkt hebt zullen niet zo gauw veranderd worden omdat het ook maar eenmalig is.
Ik weet alleen nog niet welke query ik zou moeten gebruiken of hoe ik de formule er in moet zetten om het te proberen.

Michel heel erg bedankt voor de uitleg en de database, ik ga hier weer wat verder mee knutselen. In VB kan ik zelf nog wat aanpassingen maken.
 
De formule die je in een query maakt is ongeveer dezelfde als je in je formulier had gemaakt. Je gebruikt dus verwijzingen naar de velden, en voert daar een berekening op uit. Als je gegevens berekent die verder niet veranderen, volstaat een query met de berekeningen, omdat je zoveel mogelijk probeert te vermijden om afhankelijke gegevens op te slaan, zoals Guus ook al aangaf. Jammer genoeg snappen ze dat principe bij Microsoft niet helemaal; in de nieuwste versie hebben ze een nieuw veldtype geïntroduceerd: een berekend veld :confused: Het moet niet veel gekker worden....
 
Goh Michel, ik snap niet waar je de tijd vandaan haalt om alles te beantwoorden, ik heb alles eens bekeken maar ik vraag mij af hoelang je al met Access werkt en waar je het allemaal geleerd hebt. Petje af hoor.
Ik heb een database voor ons bedrijf gemaakt, ben ik weken mee zoet geweest toen ik thuis liep vanwege een knieprothese oftewel een nieuw kniegewricht (pijnlijk) met het boek erbij, maar dan nog.

Nogmaals hartelijk bedankt.
Kan alleen niet meer vinden waar ik de vraag op opgelost kan zetten!!!
 
Rechtsonder staat een linkje. Daarmee zet je 'm op opgelost.
Mijn kennis heb ik door de jaren heen opgebouwd; vornamelijk door trial and error, zoals dat heet... er is dus hoop voor iedereen ;)
 
Het zal je niet verbazen als het antwoord een beetje voorloopt op de cursus ;)
Je kunt je vraag oplossen met queries, maar dat lijkt mij in dit geval meer werk opleveren voor de gebruiker (extra knoppen en zo) dan nodig is, dus daarom heb ik een voorbeeldje gemaakt met een eenvoudige functie die het totaal berekent, en vervolgens invult op het formulier. Het idee erachter is eigenlijk simpel: je kunt een tekstvak op een formulier maar één keer toewijzen. Dat kan een object zijn, zoals een tabelveld, of een formule, zoals je zelf ook gemaakt hebt. Echter, gebruik je een formule, dan kun je de berekening niet meer opslaan. Wil je een waarde opslaan, dan kun je weer geen formule gebruiken. Da's een vicieuze cirkel waar je dus niet uitkomt.
Vandaar dat we de berekening in dat soort gevallen laten uitvoeren op het formulier, en niet in het tekstvak zelf. Met VBA kun je de berekening dus wel degelijk maken. Of je berekeningen wel of niet opslaat, is niet zo zwart-wit als Guus zegt. Als je in je berekening bijvoorbeeld gebruik maakt van gegevens die aan fluxuaties, zoals prijzen, is het wel degelijk zinvol om in een tabel (denk aan bestellingen) ook berekeningen op te slaan; je wilt in dat geval niet dat een bestelling of offerte ineens een nieuwe totaalprijs krijgt... Daarom dus dat ik in je voorbeeld de berekeningen toch heb gekoppeld aan wat velden.

Het opslaan van totalen (procesgegevens) is iets dat voornamelijk wordt gedaan in een datawarehouse. Je moet een hele goede reden hebben om processgegevens in je database op te slaan. Het is iets dat je moet vermijden. Maar zoals gezegd niet ten koste van alles. Voor kleine databases die je zelf thuis maakt voor eigen gebruik die niet onderhouden hoeft te worden mag je dat zelf weten. Zolang je dat professioneel maar niet doet.

Enjoy!
 
Het opslaan van totalen (procesgegevens) is iets dat voornamelijk wordt gedaan in een datawarehouse

Dat spreek ik tegen.
In professionele databases worden wat jij "procesgegevens" noemt vaak wel opgeslagen.
Daar zijn in de praktijk twee redenen voor.
Reden 1 is (zoals OctaFish al aangaf) dat een gegeven dynamisch is.
Denk bijvoorbeeld aan artikelprijzen. Deze wijzigen in de loop van de tijd.
Reden 2 is dat door afleidbare gegevens op te slaan deze sneller benaderd kunnen worden. Oftewel, de overweging is dan gebaseerd op performance overwegingen.

Uit ervaring kan ik vertellen dat reden 2 in professionele databases zeer veel wordt toegepast.

Tardis
 
Reden 2 is dat door afleidbare gegevens op te slaan deze sneller benaderd kunnen worden. Oftewel, de overweging is dan gebaseerd op performance overwegingen.

En daar sluit ik mij helemaal bij aan; ook wij werken met databases waarbij extra referentiegegevens worden opgeslagen, bijvoorbeeld voor zoekfuncties in een tabel.
Kortom: je moet eigenlijk bij elke database bedenken hoe je de gegevens (en welke gegevens) je moet opslaan zodat de db optimaal presteert.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan