Problème de remplissage d'une collection d'objet ... a l'aide!

Signaler
Messages postés
20
Date d'inscription
samedi 25 novembre 2000
Statut
Membre
Dernière intervention
2 août 2006
-
Messages postés
20
Date d'inscription
samedi 25 novembre 2000
Statut
Membre
Dernière intervention
2 août 2006
-
Bonjour a tous, voici mon problème:
J'ai une collection:

Dim TabUtils As Collection

Dans cette collection je souhaite stocker des objets de type "Personnel" qui provienne d'une classe du même nom.
Dans la logique de mon programme je doit tout d'abord ressortir par une requête la totalité du personnel et ensuite les stocker dans la collection.
Jusqu'a la tout va bien ...
J'ai créer une boucle dans laquelle je recupere les resultat de ma requete champs par champs pour les mettre dans mon objet provisoire.
Le problème intervient a la ligne:

TabUtils.Add UserProv, str2

A chaque fois que je rajoute un objet dans la collection, les autre qui y sont deja rentré prenne sa valeur
du type:
Item1=UserProv
Item2=UserProv=Item1
Item3=UserProv=Item1=Item2
ect...
Merci par avance pour ce qui voudront bien me proposer quelques suggestions afin de pouvoir remplir correctement ma collection

Ps: je suis un débutant VB

Voici le code "complet":

Private Sub ChargerUtils()
'Déclaration des variables locales
Dim UserProv As New Personnel
Dim i As Variant
Dim str As Variant
Dim str2 As Variant

'Instanciation de la connexion et du Recordset
Set con = New Connection
Set Rec = New Recordset


Set TabUtils = New Collection

'définition du pilote de connexion
con.Provider = "Microsoft.Jet.Oledb.4.0"

'renseignement de la base à laquelle on va se connecter
con.ConnectionString = "D:\DataBase.mdb"

'Ouverture de la connexion
con.Open

i = 1
'execution de la requete
Rec.Open "SELECT * FROM Personnel", con, adOpenDynamic, adLockOptimistic 'requete ok


'Remplissage de la collection tant que le Recordset n'est pas au dernier champs
Do While Rec.EOF = False
str = "key"
str2 = str & i
On Error GoTo erreur
With UserProv
.Nom = Rec.Fields("Nom")
.Prenom = Rec.Fields("Prénom")
.PASSWORD = Rec.Fields("Password")
.G1 = Rec.Fields("G1")
.G2 = Rec.Fields("G2")
.G3 = Rec.Fields("G3")
.G4 = Rec.Fields("G4")
.G5 = Rec.Fields("G5")
.DROITS = Rec.Fields("Droits")
End With

'Déplacement du curseur vers le prochain enregistrement
Rec.MoveNext

'Ajout de l'objet Personnel courant dans la collection
TabUtils.Add UserProv, str2 <- problème
i = i + 1
Loop

'Fermeture des variables de connexion et Recordset
Rec.Close
con.Close
Exit Sub
erreur:
MsgBox Err.Description
End Sub

4 réponses

Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
27
En tete de ta boucle, fait un "Set UserProv = New Personnel"
et déclare UserProv sans l'instancier par "Dim UserProv As Personnel"
Le but étant de créer une nouvelle instance de UserProv à chaque tour de boucle.

CR
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
27
Au passage, je ne vois pas l'utilité de passer par une var str pour construire ta clé d'item !

Christophe R
Messages postés
571
Date d'inscription
vendredi 30 décembre 2005
Statut
Membre
Dernière intervention
12 juillet 2012
3
Salut les amis :)

L' argument key doit être une expression de chaîne. Key est facultatif
mais "un identifiant indiquant une chaîne de clé susceptible d'être
utilisée à la place de l' index de position pour accéder à un membre de
la collection". Si pas string, provoque une erreur.
Messages postés
20
Date d'inscription
samedi 25 novembre 2000
Statut
Membre
Dernière intervention
2 août 2006

Merci beaucoup crenaud76, je me doutais
qu'il y avait un probleme avec mon instance d'objet mais comme tu peux
le voir ça ne m'a pas empécher de bloquer sur le problème.

Encore merci pour votre contribution