Flexgrid et données venant d'une base

Résolu
bcmfr Messages postés 137 Date d'inscription jeudi 18 juillet 2002 Statut Membre Dernière intervention 20 novembre 2016 - 7 mars 2006 à 20:26
bcmfr Messages postés 137 Date d'inscription jeudi 18 juillet 2002 Statut Membre Dernière intervention 20 novembre 2016 - 8 mars 2006 à 10:01
Bonjour à tous

je débute en visual basic et je cherche à récupérer les données d'une base access dans une msflexgrid.

J'ai donc le code suivant:

'On règle la MSFlexGrid1
MSFlexGrid1.ColWidth(0) = 1955
MSFlexGrid1.ColWidth(1) = 1500
MSFlexGrid1.ColWidth(2) = 1500
MSFlexGrid1.Rows = 2
MSFlexGrid1.FixedRows = 1
MSFlexGrid1.FixedCols = 0
MSFlexGrid1.TextMatrix(0, 0) = "Nom d'affichage"
MSFlexGrid1.TextMatrix(0, 1) = "Nom"
MSFlexGrid1.TextMatrix(0, 2) = "Prénom"





'On séléctionne les differents groupes
sql = "select affichage,nom, prenom from contacts"
Set rs = db.OpenRecordset(sql, dbOpenSnapshot)





Dim i As Long
While Not rs.EOF


for i = 1 to 10


MSFlexGrid1.TextMatrix(1, 0) = rs.Fields("affichage")
MSFlexGrid1.TextMatrix(1, 1) = rs.Fields("nom")
MSFlexGrid1.TextMatrix(1, 2) = rs.Fields("prenom")





rs.MoveNext
next i
Wend

Mais ce code me renvoi l'erreur suivante:

Erreur 381 index hors limite

J'ai essayé via ce forum de résoudre le pb mais je n'ai pas réussi.

Je fais donc appel à vos lumières...

merci d'avance

3 réponses

cs_jperre Messages postés 268 Date d'inscription lundi 9 janvier 2006 Statut Membre Dernière intervention 19 janvier 2017 2
8 mars 2006 à 09:26
Pour remplir une MSFlexgrid avec les données d'un Recordset, il faut :
- Créer une fonction pour positionner le contenu de chaque champ dans la cellule correspondante. Cette fonction, fournie par Microsoft dans l'aide de MSDN s'écrit de la manière suivante :

Public Function Fgi(r As Long, c As Long, msFG As MSFlexGrid) As Long
Fgi = c + msFG.Cols * r
End Function

Ensuite pour entrer les données dans les cellules :
Dim r As Long, lNbEnr, bNbFields As Byte, c As Byte

rs.MoveLast
lNbEnr=rs.RecordCount
bNbFields=rs.Fields.Count
rs.MoveFirst
With MSFlexgrid1
.Rows = lNbEnr + 1
.Cols = bNbFd
.FixedRows = 1
.FixedCols = 0
'Creation des en têtes de colonnes
For c=0 To bNbFields-1
.TextArray(Fgi(0, c, MSFlexgrid1))=rs.Fields(c).Name
Next c
'Ecriture des données
For r=1 To lNbEnr
For c=0 To bNbFields-1
If Not IsNull(rs.Fields(c)) Then .TextArray(Fgi(r, c, MSFlexgrid1))=rs.Fields(c)
Next c
rs.MoveNext
Next r
...
Ce code fonctionne correctement.
Bon courage!...
3
bcmfr Messages postés 137 Date d'inscription jeudi 18 juillet 2002 Statut Membre Dernière intervention 20 novembre 2016
8 mars 2006 à 10:01
Merci pour ta réponse!! ca marche bien!!
0
bcmfr Messages postés 137 Date d'inscription jeudi 18 juillet 2002 Statut Membre Dernière intervention 20 novembre 2016
8 mars 2006 à 10:01
Merci pour ta réponse!! ca marche bien!!
0
Rejoignez-nous