Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Nombre de records avec OpenRecordSet

3 réponses
Avatar
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

3 réponses

Avatar
Sylvain Lafontaine
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" wrote in message
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




Avatar
3stone
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)
Avatar
3stone
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)