Nombre de records avec OpenRecordSet

Le
Dan
Bonjour toud,

Losrque j'utilise le requête suivante manuellement :
"SELECT Categories.CategoryID AS Category, Categories.CategoryDesc as
Description FROM Categories WHERE (((Categories.CategoryType)='M'));"
le résultat me montre 2 (deux) records
Mais si j'utilise le même avec un OPenrecordset, la valeur .RecordCount
indique 1 !! Avec un espion, le recordset ne contient effectivement qu'un
record !!!

Merci pour votre aide.

Ici mon exemple de code :
Dim IndexCat, CatNr, SubCatNr As Integer
Dim CatDesc, SubCatDesc, MyStr As String

Dim dbs As Database
Dim qdfTemp As QueryDef
Dim rst As Recordset
Dim MyCat(2, 500)
Dim MySubCat(3, 500)

Set dbs = CurrentDb()

MyStr = "SELECT Categories.CategoryID AS Category, Categories.CategoryDesc
as Description FROM Categories WHERE (((Categories.CategoryType)='M'));"

Set qdfTemp = dbs.CreateQueryDef("", MyStr)

Set rst = qdfTemp.OpenRecordset

IndexCat = rst.RecordCount

'ReDim MyCat(3, IndexCat + 1)

CatNr = 0

With rst
' Enumerate records.
.MoveFirst
Do While CatNr < IndexCat
MyCat(0, CatNr) = !Category
MyCat(1, CatNr) = !Description
Debug.Print "Rec : " & CatNr & " Cat <" & MyCat(0, CatNr) & ">
<" & MyCat(1, CatNr) & ">"
CatNr = CatNr + 1
Loop
.Close
End With

dbs.Close
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Sylvain Lafontaine
Le #18406671
Je n'ai pas essayé votre code mais c'est bien souvent une mauvaide idée que
d'utiliser .RecordCount car dans plusieurs cas, selon le type de recordset,
la valeur de RecordCount sera fausse; comme par exemple elle sera égale à -1
ou à 1 au lieu de la valeur désirée.

Ajouter un .MoveLast avec un .MoveFirst ou mieux encore, tester la fin du
recordset avec .EOF:

Do While Not rst.EOF
...
rst.MoveNext
Loop

Aussi, dans votre code, vous avez oublié de mettre un .MoveNext dans votre
boucle.


--
Sylvain Lafontaine, ing.
MVP - Technologies Virtual-PC
E-mail: sylvain aei ca (fill the blanks, no spam please)


"Dan" news:
Bonjour toud,

Losrque j'utilise le requête suivante manuellement :
"SELECT Categories.CategoryID AS Category, Categories.CategoryDesc as
Description FROM Categories WHERE (((Categories.CategoryType)='M'));"
le résultat me montre 2 (deux) records...
Mais si j'utilise le même avec un OPenrecordset, la valeur .RecordCount
indique 1 !! Avec un espion, le recordset ne contient effectivement qu'un
record !!!

Merci pour votre aide.

Ici mon exemple de code :
Dim IndexCat, CatNr, SubCatNr As Integer
Dim CatDesc, SubCatDesc, MyStr As String

Dim dbs As Database
Dim qdfTemp As QueryDef
Dim rst As Recordset
Dim MyCat(2, 500)
Dim MySubCat(3, 500)

Set dbs = CurrentDb()

MyStr = "SELECT Categories.CategoryID AS Category, Categories.CategoryDesc
as Description FROM Categories WHERE (((Categories.CategoryType)='M'));"

Set qdfTemp = dbs.CreateQueryDef("", MyStr)

Set rst = qdfTemp.OpenRecordset

IndexCat = rst.RecordCount

'ReDim MyCat(3, IndexCat + 1)

CatNr = 0

With rst
' Enumerate records.
.MoveFirst
Do While CatNr < IndexCat
MyCat(0, CatNr) = !Category
MyCat(1, CatNr) = !Description
Debug.Print "Rec : " & CatNr & " Cat <" & MyCat(0, CatNr) & ">
<" & MyCat(1, CatNr) & ">"
CatNr = CatNr + 1
Loop
.Close
End With

dbs.Close




3stone
Le #18414021
Salut,

"Dan"
| Losrque j'utilise le requête suivante manuellement :
| "SELECT Categories.CategoryID AS Category, Categories.CategoryDesc as
| Description FROM Categories WHERE (((Categories.CategoryType)='M'));"
| le résultat me montre 2 (deux) records...
| Mais si j'utilise le même avec un OPenrecordset, la valeur .RecordCount
| indique 1 !! Avec un espion, le recordset ne contient effectivement qu'un
| record !!!
|
| Merci pour votre aide.
|
| Ici mon exemple de code :
| Dim IndexCat, CatNr, SubCatNr As Integer
| Dim CatDesc, SubCatDesc, MyStr As String
|
| Dim dbs As Database
| Dim qdfTemp As QueryDef
| Dim rst As Recordset
| Dim MyCat(2, 500)
| Dim MySubCat(3, 500)
|
| Set dbs = CurrentDb()
|
| MyStr = "SELECT Categories.CategoryID AS Category, Categories.CategoryDesc
| as Description FROM Categories WHERE (((Categories.CategoryType)='M'));"
|
| Set qdfTemp = dbs.CreateQueryDef("", MyStr)
|
| Set rst = qdfTemp.OpenRecordset
|

ici, il faut commencer par vérifier si le recordset est peuplé...


If Not rst.EOF Then

'// Parcourir le recordset
rst.MoveLast

'// Conter les records
IndexCat = rst.RecordCount

'// Revenir au début pour la suite...
rst.Move.First

ensuite ton traitement...

'// si recordset vide
else

MsgBox "Rien, nada..."

End If

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
3stone
Le #18414201
brrrr... ;-)

| ici, il faut commencer par vérifier si le recordset est peuplé...
|
|
| If Not rst.EOF Then
|
| '// Parcourir le recordset
| rst.MoveLast

'// Compter les records
IndexCat = rst.RecordCount

'// Revenir au début pour la suite...
rst.MoveFirst


que j'avions voulu dire ;-)

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Publicité
Poster une réponse
Anonyme