Records tellen in een query met vba

Status
Niet open voor verdere reacties.

anlag1

Gebruiker
Lid geworden
31 okt 2010
Berichten
144
Hoe kan ik records tellen in een query met vba?:confused:
Gr,
Andre
 
Klik eens op Hier, dan denk ik wel dat het je lukt.
 
Laatst bewerkt:
Hangt er vanaf wat je wilt tellen; als je een query maakt en de knop <Totalen> aanzet, kun je groeperen op een willekeurig veld (met de functie <Group By>), en met de functie <Aantal> tel je dan het aantal records per groep. Wil je alleen het aantal records weten, dan pak je het sleutelveld, in combinatie met de functie <Aantal>.

Met VBA open je de recordset van de tabel, en gebruik je de functie Count om het aantal records te tellen.
 
Laatst bewerkt:
Heb dit er van gemaakt, doe iets verkeerd m.b.t qry1, als ik daar tbl1 van maak, gaat het wel goed, worden de records geteld.
Verder weet ik niet welke functie nu de juiste is, is dat Count, Dcount of Recordcount?

Code:
Private Sub Ok_Click()

Dim db As DAO.Database
Dim rs As DAO.Recordset

Set db = CurrentDb
Set rs = db.OpenRecordset("qry1", dbOpenDynaset)
rs.MoveLast
MsgBox rs.RecordCount

End Sub

Gr.
Andre
 
Eerst het verschil maar tussen de verschillende Count functies. DCount gebruik je meestal om een waarde op te zoeken op basis van een vergelijking die je wilt maken in een query o.i.d. als je een aantal nodig hebt van een andere gegevensbron. Hij valt in de categorie Statistische Domeinfuncties, een categorie die alles terugleest als tekst, dus niet altijd bruikbaar. In een query kun je met de functie Aantal (of Count in VBA) waarden tellen. In queries gebruik je Aantal meestal in Totalen functies, waarbij je een aantal wilt zien van een bepaalde groep. Recordcount is, zoals de naam al aangeeft, een eigenschap van een Recordset. Het aantal records in de tabel of query dus. Het resultaat ervan hangt af van de manier waarop de recordset geopend wordt.
Bekijk deze code maar eens, waarbij een tabel wordt geopend en een query op basis van dezelfde tabel:

Code:
    With CurrentDb.OpenRecordset("Query4")
        MsgBox .RecordCount
        .MoveFirst
        .MoveLast
        MsgBox .RecordCount
    End With

Het eerste voorbeeld opent een Query, en laat twee msgboxen zien met het aantal records. Als je deze variant zelf uitprobeert, zul je zien dat de eerste msgbox de waarde 1 zal geven, en de tweede msgbox het werkelijke aantal. Dat komt door de manier waarop de recordset wordt gelezen door de procedure. Bij het openen van een query, zonder nadere parameters, wordt de query geopend en staat de cursor op het eerste record. Access weet op dat moment niet hoeveel records er zijn, dus het totaal is op dat moment 1. Ga je naar het laatste record, en dan terug naar het eerste, dan weet Access inmiddels exact hoeveel record er zijn, en krijg je het goede aantal.

Code:
    With CurrentDb.OpenRecordset("tblPaperBin")
        MsgBox .RecordCount
    End With

Voer je dezelfde procedure uit op een tabel, dan krijg je gelijk het juiste aantal records. Je hoeft dus niet eerst naar het laatste record te bladeren, en daarna terug naar het eerste.
 
Michel,
Heb je eerste voorbeeld toegepast, werkt prima op een query zonder criteria.
De routine staat achter een knop van een formulier met 2 keuzelijsten waarin de criteria wordt gekozen voor de query.
Dit moet blijkbaar ook kenbaar gemaakt worden worden in de VBA code, krijg een fout melding die luidt als volgt:

"fout 3061 tijdens uitvoering; er zijn te weinig parameters, het verwachte aantal is 2"

Gr. Andre
 
Ik snap niet helemaal waarom je de query opent met keuzelijsten als criterium, en vervolgens (ik neem aan dezelfde) query wilt openen met VBA. Ik zou zeggen: doe ofwel alles met queries, of alles via VBA. Nu gebruik je twee technieken voor hetzelfde, en dat gaat meestal niet best.
 
beide keuzelijsten in het formulier leveren de criteria voor 3 query's, dat werkt verder prima. Nu wil ik in een msgbox van elke query het aantal records laten zien. dat kan toch alleen maar in vba?
Mocht je andere suggesties hebben zijn deze uteraard van harte welkom,
Gr.
Andre
 
Niet op de manier die je nu wilt; als je de queries opent en er zitten criteria in van de keuzelijsten, dan krijg je die ook gevraagd als je de query via VBA opent. Dus ofwel de criteria op een andere manier in de queries zetten (via VBA dus) ofwel vergeten dat je het aantal records via een msgbox opvraagt. Lijkt mij een simpele keus :)
 
Je hebt gelijk, in vba moet je wel heel wat overhoop halen omdat voor elkaar te krijgen,
ik laat het er bij.
Dank je,
Gr.
Andre
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan