recordset lukt niet

Status
Niet open voor verdere reacties.

Pletter

Gebruiker
Lid geworden
15 mei 2006
Berichten
320
Zoek me een slag in de rondte of ik zie iets over het hoofd.:mad:

Code:
z = Me.txtDatum
MsgBox z 'geeft juiste datum van ongebonden formulier

Dim rs As DAO.Recordset
     
Set rsrecordset = CurrentDb.OpenRecordset("SELECT * FROM tblReagering WHERE regDatum = " & Me.txtDatum)

MsgBox rsrecordset.RecordCount 'geeft als resultaat 0
 
Probeer deze eens:
Code:
    Set rsrecordset = CurrentDb.OpenRecordset("SELECT * FROM tblReagering WHERE regDatum = CDate(" & CDbl(Me.txtDatum) & ")")
 
Bedankt,

Zie dat er drie waarden veranderen in het formulier en dat zijn ook het aantal records met de datum Me.txtDatum.

Alleen MsgBox rsrecordset.RecordCount geeft als waarde 1, wat dus eigenlijk 3 moeten zijn.
 
RecordCount laat in een DAO recordset altijd 1 zien, omdat de cursor niet verder dan het eerste record komt. Wil je het juiste aantal zien, dan moet je eerst rs.MoveLast doen, gevolgd door rs.MoveFirst. Dan klopt het aantal wél. Of een ADODB recordset maken, die kan het wél in één keer uitlezen.
 
Top,

opgeslagen in het hoofd. Weet nu zeker dat het naar behoren werk.
 
ADODB recorsets geven direct het correcte aantal als je adOpenStatic meegeeft, maar dan trek je onmiddellijk de complete recordset in het geheugen, wat niet slim is natuurlijk. Als je moet weten hoeveel records er zijn kan je beter een command object met Count gebruiken. Als je wil weten of er records zijn, of door alle records wil bladeren kan je .BOF en .EOF gebruiken.
 
... wat niet slim is natuurlijk.
De natuur heeft weinig van doen met slimheid, noch met recordsets. Als je (voor)kennis hebt van het aantal te verwachten records, dan kun je zelf wel een inschatting maken of het slim is om het aantal records op voorhand te weten. Qua snelheid zit er overigens ook niet zoveel verschil in de beide methodes; MoveLast en MoveFirst kan bij grote tabellen ook behoorlijke vertraging opleveren.
Daarnaast is het verhaal van noella niet volledig, want er zijn drie manieren om met ADO de Recordcount goed te krijgen, waarvan adOpenStatic er één is. De andere twee: adOpenKeySet (ook een CursorType) en het veranderen van de CursorLocation. Standaard 'kijkt' ADO naar de records aan de Server kant, en haalt dan steeds een nieuw record op. Met als gevolg dat je niet met alle CursorTypes het juiste aantal krijgt. Je kunt de CursorLocation ook aan de ClientSide zetten (adUseClient). Daarmee 'verplaats' je de tabel naar de VBA omgeving (feitelijk creëer je een statische kopie) en omdat je een kopie van de tabel hebt, weet je ook gelijk het juiste aantal records. Ook hiervoor geldt: het aantal records bepaalt de snelheid, en of het zinvol is of niet.
 
om met ADO de Recordcount goed te krijgen,
Om verwarring te vermijden:
* Ik had het over ADODB recordsets niet ADO.
* Movelast en movefirst laden de complete set, daarom dat ik ze niet vernoem.
* De complete uitleg van ADODB recordsets vind je op de microsoft site en daarom is dit hier niet erg zinvol.
* En best practice is altijd om in het begin al rekening te houden met het feit dat de recordset kan groeien.
 
Om verwarring te vermijden:* Ik had het over ADODB recordsets niet ADO.
1. Ik ook! Je kunt niet eens iets anders als ADODB gebruiken in Access als je alleen de ADO bibliotheek laadt. Dus wie schept er nu verwarring? :D.
2. Om met DAO het juiste recordaantal op te halen, moet je MoveLast en MoveFirst gebruiken, er is geen andere manier. Dat geldt overigens ook voor de twee overige CursorTypes die -1 opleveren als je dat niet doet.
3. Ik zie in dit draadje nergens een complete uitleg van ADODB recordsets. En de uitleg díe er staat is wel degelijk relevant, omdat TS zich afvraagt waarom hij met zijn huidige methode de verkeerde aantallen leest.
4. Heb je mijn laatste zin wel gesnapt?
 
Tjonge wat een leer momentje.

Gelukkig gebruik ik ook een kopie met een minimaal aan record's.
Maar ik wil wel controleren of de juiste aantal record's werden opgehaald.
Had 3 record's her er der (10.000) aangepast en deze werden er netjes weer gegeven.

bedankt beide voor de info.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan