marcod59
Messages postés170Date d'inscriptionvendredi 16 janvier 2004StatutMembreDernière intervention13 juin 2010
-
13 août 2006 à 14:22
marcod59
Messages postés170Date d'inscriptionvendredi 16 janvier 2004StatutMembreDernière intervention13 juin 2010
-
13 août 2006 à 21:28
Bonjour,
J'ai une base de données ACCES qui remplit un contrôle MSFlexgrid. Je voudrais que seuls les 50 derniers enregistrements soient visibles dans ce contrôle. Voici le code que j'ai essayé, mais qui ne fonctionne pas, j'ai l'erreur 3265 Elémént non trouvé dans cette collection. Quelqu'un voit-il où se situe l'erreur et comment y remédier ? Voici le code que j'utilise :
Set db = OpenDatabase(App.Path & "\base.mdb")
sql = "select * from suivi" ' On séléctionne tous les champs de la table suivi
Set rs = db.OpenRecordset(sql, dbOpenSnapshot) '
s$ = "N° |> N° OP |>Type |> reg |>Date & Heure |>Libellé "
Grid1.FormatString = s$
'a = Data1.Recordset.RecordCount
rs.MoveLast
a = rs.RecordCount
rs.MoveFirst
If a > 10 Then
b = a - 10
b = CLng(b)
rs.Move (b)
Do While Not b = a
Grid1.AddItem rs.Fields(b)
b = b + 1
Loop
rs.Close
End If
marcod59
Messages postés170Date d'inscriptionvendredi 16 janvier 2004StatutMembreDernière intervention13 juin 2010 13 août 2006 à 20:51
Plus la peine de chercher, j'ai trouvé un code qui me convient que voici :
Set db = OpenDatabase(App.Path & "\base.mdb")
sql = "select * from suivi" ' On séléctionne tous les champs de la table suivi
Set rs = db.OpenRecordset(sql, dbOpenSnapshot) '
s$ = "N° |> N° OP |>Type |> reg |>Date & Heure |>Libellé "
Grid1.FormatString = s$
rs.MoveLast
a = rs.RecordCount
rs.MoveFirst
If a > 10 Then
b = CLng(a - 10)
rs.Move (b)
Do While Not b = a
un=rs.Fields(0)
de=rs.Fields(1)
tr=rs.Fields(2)
qu=rs.Fields(3)
ci=rs.Fields(4)
tou = "" & Chr(9) & un & Chr(9) & de & Chr(9) & tr & Chr(9) & qu & Chr(9) & ci
Grid1.AddItem tou
b = b + 1
rs.MoveNext
Loop
rs.Close
End If
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 13 août 2006 à 17:37
Bonjour,
>Elémént non trouvé dans cette collection...
signifie que le champ référencé (Fields(b) en l' occurence) n' existe pas dans la collection
des champs de ta table.
causes :
-b dépasse le nombre de champs de la table
- b est négatif
- b non déclarée
D' autre part je n' ai pas compris ton raisonnement dans Do While...
Peux-tu m' en dire plus ?
marcod59
Messages postés170Date d'inscriptionvendredi 16 janvier 2004StatutMembreDernière intervention13 juin 2010 13 août 2006 à 19:45
Tout d'abord, je rectifie un peu ma question du départ. J'ai mis 50 derniers enregistrements et dans mon code je table sur 10, ceci a été fait pour essayer. Pour la boucle Do While et bien je débute avec (b) qui est le dernier enregistrement moins 10 et je sors de la boucle une fois que j'atteins la fin des enregistrements (a).
marcod59
Messages postés170Date d'inscriptionvendredi 16 janvier 2004StatutMembreDernière intervention13 juin 2010 13 août 2006 à 20:32
Dans mon code, il doit y avoir une autre erreur. Grid1.AddItem rs.Fields(b) ne fait référence qu'à un champ de la base, alors qu'il faut que je remplisse 5 colonnes du MSFlexGrid (dans la base il y a également 5 colonnes)
marcod59
Vous n’avez pas trouvé la réponse que vous recherchez ?
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 13 août 2006 à 21:11
Oui c' est ce que je vois.
En fait tu confonds n° d' enregistrement et index du champ.
Dans Fields(b), b doit faire référence à une colonne de la table (index du champ)
Essaies plutôt ceci
On error resume next ' au cas ou ta table serait vide, sinon
' sans ça cela MoveLast et MoveFirst
'provoque une erreur
With rs
'remplir le recordset
.MoveLast
.MoveFirst
if .Bof and .Eof Then Exit Sub 'tu peux ajouter MsgBox "Table vide "
a = .RecordCount
Dim i as integer
If a >= 10 Then
i=10 ' puisque tu table sur 10
Else
i=a 'moins de 10
End if
Dim y as integer
y=0 'ligne du Grid
.MoveLast
Do While Not .Bof And i>1
y=y+1
Grid1.TextMatrix(y,1).Text rs.Fields(1)
Grid1.TextMatrix(y,2).Text rs.Fields(2)
Grid1.TextMatrix(y,3).Text rs.Fields(3)
Grid1.TextMatrix(y,4).Text rs.Fields(4)
Grid1.TextMatrix(y,5).Text rs.Fields(5)
'1,2,3,4,5 représentent les index des champs
'tu peux remplacer rs.Fields(1)....PAR rs![NomDuChamp]
i=i-1
if Not .Bof then .MovePreview
Loop
.Close
End With