optellen van vinkjes in access

Status
Niet open voor verdere reacties.

Marabunta

Gebruiker
Lid geworden
25 okt 2008
Berichten
51
Goedendag,

k heb een tabel met meerdere records erin.
Sommige records hebben een vinkje aanstaan in een kolom.
Deze kolom heet September en is om te zien of iemand aanwezig is geweest in een bepaalde maand.

Nu zou ik graag willen zien hoeveel mensen dat in totaal zijn geweest.
Dit wil ik laten zien in het formulier "September"

Welke code moet ik toepassen om het aantal vinkjes op te tellen vanuit de tabel "Leerlingen" en de kolom "September" en dat (real-time) te tonen in het formulier "September"?

Alvast bedankt voor de moeite.

Mvg,
Marabunta.
 
Een Ja/Nee veld slaat intern de waarden 0 en -1 op. Deze waarden kun je daarom gewoon optellen. Met de functie ABS maak je van de uitkomst een positief getal. Dus op je formulier krijg je de formule =ABS(Sum([chkAanwezig])).
 
En hoe laat ik die verwijzen naar het formulier "Leerlingen" en de kolom "September"?
 
Ik dacht dat je dat al geregeld had in het formulier 'September'? Ik neem aan dat je daar een selectiequery op hebt gezet die de juiste records van september selecteert. De formule zet je dan in een tekstvak in de koptekst of voettekst.
 
Nee, heb er nog helemaal niks mee gedaan.
Ikzelf weet er weinig van af en zoek de meeste dingen op het internet.
Daar vanaf een voorbeeld kan ik het vaak wel aanpassen.
 
Wel, daar begint je oplossing mee: je wilt een berekening zien op basis van één maand, en die wil je tonen in een formulier. Je begint dus met het maken van je formulier, en eventueel een query als je het formulier wilt maken op basis van een recordselectie. Al begin ik te vermoeden dat je in je formulier alle records wilt zien, en niet alleen die van september.... In welk geval je het formulier gewoon kunt baseren op de tabel Leerlingen. Maakt het geheel ook ietsje simpeler.
In dit formulier maak je in de koptekst dus een tekstvak. Dit tekstvak geef je de formule =ABS(Sum([September])). En daarmee heb je het totaal aantal aangevinkte vakjes op je formulier. De formule wordt niet gelijk bijgewerkt als je een vinkje aan- of uit zet, maar wel als je naar een ander record bladert, of het formulier opnieuw opent. Om hem automatisch bij te laten werken moet je namelijk wat VBA gebruiken.
 
Het is me nu wel gelukt om een Query te maken van het aantal vinkjes dat is is aangevinkt in de tabel.
Hij laat nu een getal zien van -16
(16 vinkjes zijn ook aan)

Als ik naar de ontwerppagina ga, dan heb ik bij veld "September" ingevuld
Bij tabel "Leerlingen"
Bij totaal "som"

De sorteervolgorde, criteria en of heb ik leeg gelaten.

Op welke manier kan ik van dit negatieve getal positief maken?
Ik weet dat ik "abs" moet gebruiken, maar kom er niet uit op welke manier precies.

En hoe kan ik dit laten zien in het formulier "September invoer bezoekers"?
 
Ik weet niet hoe je de formule hebt gemaakt op je formulier, maar ik neem aan dat je een queryveld hebt gebruikt, althans dat lees ik uit je verhaal.

Bij totaal "som"
In de query kun je de functie ABS gebruiken in combinatie met de functie Som, maar als je alles op basis van de tabel doet, en de berekening Som dus op het tekstvak, dan zet je ABS er voor. Dus: =ABS(SOM([September]))
 
maar als je alles op basis van de tabel doet, en de berekening Som dus op het tekstvak, dan zet je ABS er voor. Dus: =ABS(SOM([September]))

Ik heb je formule ingevuld in het eigenschappenvenster en dan bij besturingselementbron

maar op het moment dat ik naar het formulier ga dan laat hij standaard het getal 0 zien.
Als ik dan een record ga opvragen wordt automatisch het vinkje bij September aangevinkt.
Hiervoor gebruik ik de volgende code in VBA:
Code:
Private Sub Fotonummer_AfterUpdate()
DoCmd.SetWarnings False
DoCmd.Requery
Foto.Picture = "c:\Foto disco\" & fotonr
DoCmd.RunSQL "UPDATE Leerlingen SET September = True where Id = Fotonummer"
DoCmd.Beep
DoCmd.GoToControl "fotonummer"
Fotonummer = ""
DoCmd.SetWarnings True
End Su

Hier wordt het getal van 0 omgezet naar 1.
Maar het gaat mij om het totaal aantal vinkjes dat is aangevinkt in de kolom September.
Wat is nu te zien krijg, zover ik het weet, is het alleen van het desbetreffende record.
 
Laatst bewerkt:
Je wilt nu blijkbaar iets anders als je in de eerste vraag stelde: nu lijkt het er op alsof je de berekening wilt laten uitvoeren als er een actie op het formulier plaatsvindt... En dan verandert het principe natuurlijk, want gegevens en berekeningen op een formulier vinden plaats als je de gegevens ophaalt, en verder niet.
Je zou de berekening ook in je code op kunnen nemen:

Code:
DoCmd.RunSQL "UPDATE Leerlingen SET September = True where Id = Fotonummer"
Me.Totaal=ABS(SUM([Me.September]))
 
Mijn excuses als ik het niet goed had uitgelegd.

Maar heb de regel toegevoegd in VB.
Nu krijg ik de volgende melding:

Compileerfout:

Sub of Function is niet gedefineerd

En op welke manier krijg ik het getal in het formulier vermeld?
 
De code die ik in de vorige post neerzette moet je toevoegen aan de code die je zelf hebt gepost; vandaar dat ik er ook een regel van jouw code bij heb gezet, om je te laten zien waar je 'm ongeveer kunt toevoegen.
Je hebt niet verteld hoe je tekstvak heet waarin de berekening moet staan, dus die heb ik voor het gemak maar [Totaal] genoemd. Uiteraard moet je die naam aanpassen aan de naam van je tekstvak. Dus je code wordt dan iets als:

Code:
DoCmd.RunSQL "UPDATE Leerlingen SET September = True where Id = Fotonummer"
Me.[B][COLOR=navy][Naam van je eigen tekstvak][/COLOR][/B]=ABS(SUM([Me.September]))
DoCmd.Beep
 
Ik heb een nieuw tekstvak aangemaakt in het gedeelte "Formulierkoptekst"
En de naam van het tekstvak aangepast naar "Totaal"
Dan krijg ik nog steeds dezelfde foutmelding.

Hieronder de code zoals ik het nu heb staan:
Code:
Private Sub Fotonummer_AfterUpdate()
DoCmd.SetWarnings False
DoCmd.Requery
Foto.Picture = "c:\Foto disco\" & fotonr
DoCmd.RunSQL "UPDATE Leerlingen SET September = True where Id = Fotonummer"
Me.Totaal = Abs(SUM([me.September]))
DoCmd.Beep
DoCmd.GoToControl "fotonummer"
Fotonummer = ""
DoCmd.SetWarnings True
End Sub
 
In een van je vorige posts heb je zelf deze code gepost:
Code:
DoCmd.RunSQL "UPDATE Leerlingen SET September = True where Id = Fotonummer"
Eerlijk gezegd kan ik mij niet voorstellen dat die werkt.... moet dat niet zijn:
Code:
DoCmd.RunSQL "UPDATE Leerlingen SET September = True where Id = " & Me.Fotonummer
Verder zou ik niet weten waarom de sum niet zou werken; als je formulier op de juiste manier is gekoppeld aan je tabel, moet hij de waarden gewoon kunnen optellen. Ik heb het zelf ook getest in een willekeurig formulier met selectievelden, en geen enkel probleem.
Post anders een voorbeeldje.
 
Ik krijd de databse niet kleiner dan 1,06 mb, zelfs na comprimeren en herstellen.
Voor zover ik weet kan ik niet meer dan 100 kb uploaden naar deze site.

Ik heb er nu nog maar 3 records, 1 query en 1 formulier instaan.

Kan ik het eventueel naar je toemailen?
Want dan kan je tot 10mb sturen.

Mvg,
Marabunta
 
En dan te bedenken dat ik 'm liever in 2003 format heb ;)
Maar volgens mij is die wel simpel te maken: nieuwe db maken, tabellen, queries en formulier(en) importeren en eventueel de functie modules. Als hij zo groot is, heb je waarschijnlijk een ingesloten logo of afbeelding in het formulier staan. Die mag je er ook wel uitgooien. Beter is het overigens om afbeeldingen te koppelen, en niet ingesloten te doen, als dat uiteraard al gebeurd is...
 
Dan moet je de oplossing in deze richting zoeken...

Ik heb er een keuzelijstje bij gemaakt, omdat ik uiteraard de barcodes niet heb, en toch iets moest kunnen kiezen. Dus dat gebeurt nu op basis van Pasnummer. Maar het idee is hetzelfde.
 

Bijlagen

Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan