[VB6] RecordSet.Recordcount geeft altijd -1 terug.*

Pagina: 1
Acties:

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 23-08 10:29
Hallo,

Ik heb een programma gescreven in VB die laat zien hoeveel records er in een record set zitten. Maar dit programma geeft altijd -1 aan. Dit terwijl er 3 records in de tabel Adressen zitten. Hier is de code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Public dbAdressen As ADODB.Connection
Public rsAdressen As ADODB.Recordset

Private Sub Form_Load()
    Set dbAdressen = New ADODB.Connection
    Set rsAdressen = New ADODB.Recordset

    con_str = "Provider=microsoft.jet.OLEDB.3.51;" & _
              "Data Source=" & _
              App.Path & "\Adressen.mdb"

    With dbAdressen
        .ConnectionString = con_str
        .Open
    End With

    rsAdressen.Open "SELECT * FROM Adressen", dbAdressen, adOpenForwardOnly, adLockReadOnly
    
    MsgBox "rsAdressen.RecordCount: " & CStr(rsAdressen.RecordCount)
End Sub


Wat is er mis met deze code?

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:02
Met jouw code is niets mis. Ik heb dit ook al enkele keren voorgehad; ik geloof dat het te maken heeft met het feit dat je nog niet door je recordset hebt gelopen.

https://fgheysels.github.io/


  • pistole
  • Registratie: Juli 2000
  • Laatst online: 16:22

pistole

Frutter

Heeft te maken idd met het doorlopen van je recordset; volgens mij je overigens ook niet adOpenForwardOnly gebruiken (i.i.g.: je moet een .MoveLast, .MoveFirst doen en dat gaat niet met dat type recordset)

Ik frut, dus ik epibreer


  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 23-08 10:29
whoami schreef op 08 April 2003 @ 08:49:
Met jouw code is niets mis. Ik heb dit ook al enkele keren voorgehad; ik geloof dat het te maken heeft met het feit dat je nog niet door je recordset hebt gelopen.
Dus wanneer ik movefirst o.i.d. doe dan zou hij het aantal moeten weergeven?

  • pistole
  • Registratie: Juli 2000
  • Laatst online: 16:22

pistole

Frutter

heb je al eens bij Microsoft gekeken?

Ik frut, dus ik epibreer


Verwijderd

eerst rsAdressen.Open
en daarna rsAdressen.MoveFirst
en dan de while not-wend enz..

  • pistole
  • Registratie: Juli 2000
  • Laatst online: 16:22

pistole

Frutter

Verwijderd schreef op 08 April 2003 @ 09:03:
eerst rsAdressen.Open
en daarna rsAdressen.MoveFirst
en dan de while not-wend enz..
lezen?
Hij wilt de RecordCount gebruiken - niet alle records langfietsen.

Ik frut, dus ik epibreer


Verwijderd

hoeft toch ook niet die while wend loop eronder te gooien, het gaat om de .MoveFirst..

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

RecordCount geeft voor zover ik weet alleen aan OF er records zijn. Het is een boolean die aangeeft of er wel (-1) of geen (0) records in je query of whatever zitten. Dit is in ieder geval zo binnen Access, als je gebruik maakt van linked tabledef objecten...

Uit de Access-help: When you work with linked TableDef objects, the RecordCount property setting is always –1.

Uit de VB-help: The property returns -1 when ADO cannot determine the number of records.

[ Voor 23% gewijzigd door OZ-Gump op 08-04-2003 10:18 ]

My personal website


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:02
Slagroom schreef op 08 April 2003 @ 08:51:
[...]

Dus wanneer ik movefirst o.i.d. doe dan zou hij het aantal moeten weergeven?
MoveLast veronderstel ik.

Trouwens, als je enkel wilt weten hoeveel records je ophaalt, en de records zelf niet wilt ophalen of tonen, dan kan je beter een
code:
1
select count(*) from tabel
doen.

[ Voor 41% gewijzigd door whoami op 08-04-2003 10:19 ]

https://fgheysels.github.io/


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

whoami schreef op 08 april 2003 @ 10:18:
Als je enkel wilt weten hoeveel records je ophaalt, en de records zelf niet wilt ophalen of tonen, dan kan je beter een
code:
1
select count(*) from tabel
doen.
True!!!
En als je stiekem toch in Access werkt is de DCount natuurlijk een heerlijke oplossing...

My personal website


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Nee, de recordcount krijg je ALLEEN als je het juiste cursor-type gebruikt.
quote uit MSDN:
RecordCount Property
Indicates the number of records in a Recordset object.

Return Value
Returns a Long value that indicates the number of records in the Recordset.

Remarks
Use the RecordCount property to find out how many records are in a Recordset object. The property returns -1 when ADO cannot determine the number of records or if the provider or cursor type does not support RecordCount. Reading the RecordCount property on a closed Recordset causes an error.

If the Recordset object supports approximate positioning or bookmarks—that is, Supports (adApproxPosition) or Supports (adBookmark), respectively, return True—this value will be the exact number of records in the Recordset, regardless of whether it has been fully populated. If the Recordset object does not support approximate positioning, this property may be a significant drain on resources because all records will have to be retrieved and counted to return an accurate RecordCount value.

The cursor type of the Recordset object affects whether the number of records can be determined. The RecordCount property will return -1 for a forward-only cursor; the actual count for a static or keyset cursor; and either -1 or the actual count for a dynamic cursor, depending on the data source.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

gebruik geen adOpenForwardOnly

maar

adOpenStatic of adOpenKeyset

zoals rsSQL.Open sSQL, ADOconnection, adOpenStatic, adLockReadOnly
Pagina: 1