recordCount property klopt niet na query in VBA

Status
Niet open voor verdere reacties.

Snoopstock

Nieuwe gebruiker
Lid geworden
30 jul 2006
Berichten
3
Hallo,
bij een de uitvoer van een query in Access'VBA krijg ik niet de verwachtte resulaten.

Ter voorbeeld heb de volgende tabel:

Tabel1:
Id getal letter
1 1000 A
2 1000 B
3 1000 C
4 2000 A
5 2000 B
7 3000 A


Hierin zijn de veldwaarden van het volgende type
Id: Autonummering
getal: String
letter: String


Vervolgens heb ik een formulier aangemaakt met een knop waarvan de eventhandler de volgende query zal uitvoeren.

myQuery = "Select [getal], [letter] FROM [Tabel1] WHERE (([getal]=""1000"") AND ([letter] = ""A""));"
Set QueryResults = myDatabase.OpenRecordset(myQuery)

ResultCount = QueryResults.RecordCount


Nu zou ik verwachten dat de ResultCount na uitvoer de waarde 1 heeft krijgt
Wat blijkt? Na uitvoer is heeft de RecordCount property de waarde 3.

Als ik dezelfde query kopieer en plak in de SQL sectie van MS Access dan krijg ik wel het juiste resultaat te zien

Als ik de RecordCount property gebruik om alle records van de betreffende recordset doorloop, blijkt er echter maar 1 record in de set te zitten.
Dat zou betekenen dat de recordset wel de verwijst naar de juiste records, maar de recordcount property niet de juiste waarde heeft gekregen.

Wat kan hiervan de oorzaak zijn..? :confused:

Ik heb een voorbeeldje bijgevoegd.

Met vriendelijke groet,
Sn00p
 

Bijlagen

Hoi Snoopstock,

Op deze manier werkt het wel (hoop ik)

Code:
Dim myQuery As String
Dim QueryResults As Recordset
Dim ResultCount As Integer
Dim myDatabase As Database
Dim i As Integer
Set myDatabase = CurrentDb

myQuery = "Select * FROM [Tabel1] WHERE ([getal]=""1000"" AND [letter] = ""A"")"
Set QueryResults = myDatabase.OpenRecordset(myQuery, dbOpenDynaset)

QueryResults.MoveLast
ResultCount = QueryResults.RecordCount

i = 1
QueryResults.MoveFirst
Do While Not QueryResults.EOF
    MsgBox "Hit " & i & " van " & ResultCount & ": [getal]= """ & QueryResults![getal] & """, [letter]= """ & QueryResults![letter] & """"
    QueryResults.MoveNext
    i = i + 1
Loop

Suc6
 
Hoi Spidey,

dank je wel voor je antwoord,
Het probleem is niet zo zeer dat mijn lus niet werkte.
Die loop was alleen om te controleren of de recordset door te lopen.

Met de door jouw zorgvuldige gedefinieerde loop
(muv. het testen op recordcount = 0 alvorens MoveFirst te gebruiken)
kan ik natuurlijk wel het werkelijk aantal records tellen, maar dat was nou net niet de bedoeling.

Ik wilde juist gebruik maken van de recordcount property om te kijken OF een
combinatie van waarden reeds in de tabel voorkomt. Toen ik de waarde van de recordcount property op het scherm liet weergeven bleek niet met mijn verwachting te kloppen.

Ook met andere queries kreeg ik 'verkeerde' waarden van recordcounts; k heb echter geen idee waarom dit is, en belangrijker nog, hoe ik ervoor kan zorgen dat de recordcount property wel klopt!

In de eerste controle heb ik de dataypen geheel in overeenstemming met de specificatie gebracht: het datatype van QueryResults van 'Object' veranderd in 'Recordset' en
het datatype van 'ResultCount' veranderd in een Long. Dit was niet de oplossing.

RTFM-en over de RecordCount property in de helpfile van VBA frustreerde me nog meer;
behalve een totaal niet-kloppende Nederlandse zin kwam ik ook de volgende zin tegen:
'U kunt ook de SQL-functie Count gebruiken om te bepalen hoeveel records de query ongeveer als resultaat zal laten zien.". Nu ben ik geen programmeur, maar van deze Fuzzy Logic krijg ik enorme jeuk. :mad:

We zoeken verder..
 
Hoi Snoopstock,

De record count property klopt wel als je hem op de volgende manier gebruikt.
Code:
Set QueryResults = myDatabase.OpenRecordset(myQuery, dbOpenDynaset)

QueryResults.MoveLast
ResultCount = QueryResults.RecordCount

suc6
 
Nogmaals bedankt Arno :thumb: :thumb:

Met uw oplossing is mijn Access tool met sprongen beter geworden.
Hartelijk dank !

Het bleek dus dat ik de mogelijkheden van de verschillende typen recordset niet kende.
Omdat ik niet zomaar iets klakkeloos wil overnemen en Access beter wilde begrijpen heb ik de Help informatie van de funktie OpenRecordSet bekeken.

Echter, ik kan hier geen vinden aansluiting op mijn kennis van database en query types, de help informatie is voor mij niet voldoende toegankelijk geschreven en ik kon geen directe doorverwijzing vinden voor meer achtergrond informatie. En da's dan toch jammer van zo'n helpfile. Misschien dat ik het via MSDN nog eens kan proberen.

In ieder geval, vriendelijk dank voor uw hulp!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan