Keitarokun
Messages postés15Date d'inscriptionsamedi 7 août 2010StatutMembreDernière intervention19 décembre 2021
-
Modifié le 19 déc. 2021 à 12:21
Whismeril
Messages postés18206Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 2 février 2023
-
19 déc. 2021 à 23:30
bonjour,
j'ai un problème concernant le remplissage d'un objet listview avec un objet recordset.
j'utilise while not recordset.eof pour faire ma boucle mais à la seconde occurrence, j'ai une erreur qui me dis que je ne peux pas implémenter deux fois la même item avec le même nom.
Normalement la listview doit afficher :
Nom Utilsateur Rang Actif
Admin 1 Admin Oui
Employer 1 Employer Oui
MNS 1 MNS OUI
PAUL MNS NON
exemple "employer 1" avec employer 1". je met le code a suivre.
sub info()
Dim StrNomUtil As String
Dim StrRangUtil As String
Dim StrActif As String
' procédure de demande d'info à la base de donnée
ProcBDD_DemandeInfoTousUtil()
'QueryBDD_DemandeInfoTousUtil est un objet recordset ADODB avec acess
If Not QueryBDD_DemandeInfoTousUtil.EOF Then
While Not QueryBDD_DemandeInfoTousUtil.EOF
Dim Listview_Util As New ListViewItem
StrNomUtil = QueryBDD_DemandeInfoTousUtil(ChampBDD_CompteUtilisateur_NomUtilisateur).Value
StrRangUtil = QueryBDD_DemandeInfoTousUtil(ChampBDD_RangUtilisateur_NomRang).Value
StrActif = QueryBDD_DemandeInfoTousUtil(ChampBDD_CompteUtilisateur_Actif).Value
Listview_Util.Text = StrNomUtil
Listview_Util.SubItems.Add(StrRangUtil)
Listview_Util.SubItems.Add(StrActif)
ListView_Utilisateur.Items.Add(Listview_Util)
QueryBDD_DemandeInfoTousUtil.MoveNext()
Listview_Util.Remove()
End While
j'ai essayé en modifiant les termes de places etc...
mais rien ça plante à la seconde occurrence.
merci pour votre aide
PS: Je sais qu'utiliser les variables string ne change rien, c'est juste histoire d'y voir plus clair.
vb95
Messages postés3391Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention 2 février 2023163 Modifié le 19 déc. 2021 à 01:31
Bonjour
Inutile de m'envoyer un message privé ( voir mes commentaires dans ce message : https://codes-sources.commentcamarche.net/forum/affich-10106533-insertion-donnees-d-une-listbox-depuis )
La messagerie privée n'est pas faite dans ce but .Elle est utilisée principalement pour des échanges privés entre contributeurs, modérateurs et personnel de CCM Codes-Sources . Vous pouvez l'utiliser pour prendre contact avec un modérateur pour un souci sur Codes-Sources ( bug du site, problème sur votre compte, etc. )
Pour tout problème de code il faut passer par le forum .
Vous avez donc poster votre souci dans le forum : c'est bien . Je m'en suis aperçu après .
Mais vous n'avez pas présenté le code comme suggéré dans ce tuto : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code De plus votre code est incomplet
1) Le
If Not QueryBDD_DemandeInfoTousUtil.EOF Then
demande un
End If
de fin
2)
Listview_Util.Remove()
ne sert à rien
Ca plante à le seconde occurrence . Soit mais c'est quoi le seconde occurrence pour vous ? A quelle ligne cela plante et quel est le message d'erreur ?
En présentant le code comme dit ci-dessus des numéros de ligne sont indiqués dans le code .
Whismeril
Messages postés18206Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 2 février 2023623 19 déc. 2021 à 08:24
Bonjour
Comme le signale vb95 (que je salue au passage) tu as posté ton code sans la coloration syntaxique ce qui le rend particulièrement peu agréable à lire et peu compréhensible.
C’est pourquoi je me teompe peut-être, mais il me semble que jamais ton code ne demande au recordset de changer d’occurence. Si j’ai raison, il n’y a pas de 2eme occurrence, mais 2 fois la première
Keitarokun
Messages postés15Date d'inscriptionsamedi 7 août 2010StatutMembreDernière intervention19 décembre 20211 Modifié le 19 déc. 2021 à 23:10
bonjour,
Merci a vous deux pour vos commentaires, je vais donc réécrire mon post de manière lisible ainsi qu'avec les explications demander par vb95. Voici le code lisible.
private sub DemandeInfo()
Dim Listview_Util As New ListViewItem
'procédure d'accès a la base de donnée ADODB Accèss
ProcBDD_DemandeInfoTousUtil()
'Objet recordset est QueryBDD_DemandeInfoTousUtil
If Not QueryBDD_DemandeInfoTousUtil.EOF Then
While Not QueryBDD_DemandeInfoTousUtil.EOF
StrNomUtil=QueryBDD_DemandeInfoTousUtil(ChampBDD_CompteUtilisateur_NomUtilisateur).Value
StrRangUtil = QueryBDD_DemandeInfoTousUtil(ChampBDD_RangUtilisateur_NomRang).Value
StrActif = QueryBDD_DemandeInfoTousUtil(ChampBDD_CompteUtilisateur_Actif).Value
Listview_Util.Text = StrNomUtil
Listview_Util.SubItems.Add(StrRangUtil)
Listview_Util.SubItems.Add(StrActif)
ListView_Utilisateur.Items.Add(Listview_Util)
QueryBDD_DemandeInfoTousUtil.MoveNext()
End While
End If
end sub
le résultat attendu dans la listview est le suivant :
Chaque occurrence correspond a une ligne du précédent tableau.
L'erreur se produit ligne 14 a l'instruction :
ListView_Utilisateur.Items.Add(Listview_Util)
Lors deux second passage de l'objet recordset ( QueryBDD_DemandeINfoTousUtil)
voici l'erreur :
Si j'ajoute un
exit while
après la ligne 15, j'obtiens la première ligne de mon tableau
Maintenant en changeant le code avec celui-ci
private sub DemandeInfo()
ProcBDD_DemandeInfoTousUtil()
If Not QueryBDD_DemandeInfoTousUtil.EOF Then
While Not QueryBDD_DemandeInfoTousUtil.EOF
Dim Listview_Util As New ListViewItem
StrNomUtil = QueryBDD_DemandeInfoTousUtil(ChampBDD_CompteUtilisateur_NomUtilisateur).Value
StrRangUtil = QueryBDD_DemandeInfoTousUtil(ChampBDD_RangUtilisateur_NomRang).Value
StrActif = QueryBDD_DemandeInfoTousUtil(ChampBDD_CompteUtilisateur_Actif).Value
Listview_Util.Text = StrNomUtil
Listview_Util.SubItems.Add(StrRangUtil)
Listview_Util.SubItems.Add(StrActif)
ListView_Utilisateur.Items.Add(Listview_Util)
QueryBDD_DemandeInfoTousUtil.MoveNext()
Listview_Util.Remove()
End While
End If
End Sub
Il ne se passe rien, ni erreur mais aussi pas de remplissage de la listview.
Et si je modifie le code afin de remplir un listbox
private sub DemandeInfo()
ProcBDD_DemandeInfoTousUtil()
If Not QueryBDD_DemandeInfoTousUtil.EOF Then
While Not QueryBDD_DemandeInfoTousUtil.EOF
Dim Listview_Util As New ListViewItem
StrNomUtil = QueryBDD_DemandeInfoTousUtil(ChampBDD_CompteUtilisateur_NomUtilisateur).Value
StrRangUtil = QueryBDD_DemandeInfoTousUtil(ChampBDD_RangUtilisateur_NomRang).Value
StrActif = QueryBDD_DemandeInfoTousUtil(ChampBDD_CompteUtilisateur_Actif).Value
ListBox1.Items.Add(StrNomUtil + vbtab + StrRangUtil + vbtab + StrActif)
QueryBDD_DemandeInfoTousUtil.MoveNext()
Listview_Util.Remove()
End While
End If
End Sub
la liste box se rempli correctement.
vb95 Pourquoi dis-tu code incomplet?
De plus votre code est incomplet
If Not QueryBDD_DemandeInfoTousUtil.EOF Then
'demande un
End If
C'est un code que j'utilise depuis longtemps, je m'en sert car je sais que je vais forcement avoir des données en récupération, sinon j'utilise une autre solution.
Try
Catch ex As Exception
End Try
Whismeril : le code pour passer les occurrence est :
QueryBDD_DemadeInfoTousUtil.MoveNext()
qui s'effecue à la fin de la boucle
While Not QueryBDD_DemandeInfoTousUtil.EOF
'...
'...
QueryBDD_DemadeInfoTousUtil.MoveNext()
end while
j'espère avoir correctement répondu à vos demande.
Whismeril
Messages postés18206Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 2 février 2023623 19 déc. 2021 à 23:07
Vb95 a dit qu’il manquait un end if parce que dans ton post initial, il n’y est pas.
C’est flagrant maintenant que @karamel a corrigé ce message.
Ce qui se voit mieux aussi, c’est le movenext qui m’avait échappé.
Je confirme qu’à chaque fois que cette ligne
Listview_Util.Remove()
est présente elle ne sert à rien.
La méthode Remove sert à supprimer une instance de la listview, or tu veux remplir la listview donc dès le départ c’est incohérent. Mais pour qu’elle supprime quelque chose, il faut lui mettre en paramètre et là y’a pas de paramètres…
Le message d’erreur dit clairement que Employer1 est déjà présent.
Est ce qu’il apparaît 2 fois (ou plus) dans la listbox?
J'ai utilisé un listbox pour des tests, et je n'ai pas eu d'erreur. C'est uniquement lorsque j'utilise la listview que ça me produit cette erreur.
Whismeril
Messages postés18206Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 2 février 2023623
>
Keitarokun
19 déc. 2021 à 23:30
Que la listbox n’ait pas généré d’erreur est normal. Parce qu’une listbox s’en moque s’il y a 2 items avec le même nom,
Et d’ailleurs ce n’est pas ce que je t’ai demandé.