Recupération du pseudo admin

Résolu
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015 - 21 juil. 2009 à 22:55
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 22 juil. 2009 à 10:24
Salut !

Voici le bout de mon code. Je n'arrive pas a trouver le L_AdminName = Data1.Recordset!Pseudo come il se doit. Il ne me donne pas le Pseudo qu'il faut. Pouvez vous m'aider svp ?

Data1.DatabaseName = App.Path & "\DataBase.mdb"
Data1.RecordSource = "Utilisateurs"
Data1.Refresh

With Data1.Recordset
.MoveFirst
While Not .EOF
If .Fields("Articles") = "1" _
And .Fields("Facturation") = "1" _
And .Fields("Banque") = "1" _
And .Fields("Comptabilite") = "1" Then
L_AdminName = Data1.Recordset!Pseudo
End If
.MoveNext
Wend
End With


Merci
----------
OS        : Windows XP SP3 et Vista 32
Platforme : VB 6.0 + SP6
Ok VB6.0 c'est pas net !
</font

8 réponses

Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
22 juil. 2009 à 02:32
Problème résolu :

With Data1.Recordset
.MoveFirst
While Not .EOF
If .Fields("Articles") = "1" _
And .Fields("Facturation") = "1" _
And .Fields("Banque") = "1" _
And .Fields("Comptabilite") = "1" _
And .Fields("DepenseRecette") = "1" _
And .Fields("Clientele") = "1" _
And .Fields("Finance") = "1" _
And .Fields("EmployeurEmploye") = "1" _
And .Fields("Immobilisation") = "1" _
And .Fields("Declarations") = "1" _
And .Fields("Statistiques") = "1" _
And .Fields("Societe") = "1" _
And .Fields("CarnetAdresses") = "1" _
And .Fields("Publipostage") = "1" _
And .Fields("Administration") = "1" _
And .Fields("PanneauConfiguration") = "1" Then
L_AdminName = .Fields("Pseudo").Value
End If
.MoveNext
Wend
End With

Merci a tous les deux, le problème est résolu ^^
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 juil. 2009 à 23:14
dur de répondre sans connaitre ta base, sa structure, son contenu.

pourquoi ne pas utiliser une requete SQL, plutot que de faire la logique dans VB :

"SELECT `Pseudo` FROM `Utilisateurs` WHERE `Articles`=1 AND `Facturation`=1 AND `Banque`=1 AND `Comptabilite`=1"


Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
22 juil. 2009 à 00:14
Merci Renfield !

Ca sera pareil puisqu'il faut renseigner tout les champs. La base de donnée est en access, les champs sont tous de valeur texte.
Si tout les champs sont de valeur 1 alors le pseudo doit s'afficher dans le label L_AdminName

Je connecte ma base de donnée avec un Data :

Data1.DatabaseName = App.Path & "\DataBase.mdb"
Data1.RecordSource = "Utilisateurs"
Data1.Refresh

Et je lui dis que si dans tout les champs la valeur est égale à 1 alors qu'il m'affiche le pseudo de celui a qui toutes les valeurs sont égale a 1

Sinon, je ne sais pas trop utiliser les requêtes...
Dim I As String
SQL = "SELECT `Pseudo` FROM `Utilisateurs` "
SQL = SQL + "WHERE `Articles`=1 AND `Facturation`=1 AND `Banque`=1 AND `Comptabilite`=1"

DataReq.DatabaseName = App.Path & "\DataBase.mdb"
DataReq.RecordSource = SQL
DataReq.Refresh

If Not (DataReq.Recordset.BOF And DataReq.Recordset.EOF) Then
DataReq.Recordset.MoveLast
DataReq.Recordset.MoveFirst
Do While Not DataReq.Recordset.EOF
I = I + DataReq.Recordset!L_AdminName
DataReq.Recordset.MoveNext
Loop
DataReq.Refresh
End If

Mais là j'ai une erreur...

Merci

----------
OS        : Windows XP SP3 et Vista 32
Platforme : VB 6.0 + SP6
Ok VB6.0 c'est pas net !
</font
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 juil. 2009 à 00:38
"Mais là j'ai une erreur... "

qui est ?


Renfield - Admin CodeS-SourceS - MVP Visual Basic
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
22 juil. 2009 à 00:42
Salut
-1- Si tu as une erreur, laquelle ?
Encore quelques heures de perdues ...

-2- Dans ta requète, tu demandes `Pseudo`et plus loin, tu veux le champ "L_AdminName" : Faut être logique, le RecordSet ne peut pas te donner un champ que tu n'as demandé précédemment.

-3- Pourquoi ne pas utiliser la même syntaxe que celle que tu as utilisée dans ton premier exemple ?
L_AdminName = .Fields("Pseudo").Value

-4- Sais-tu qu'un RecordSet peut te dire combien d'enregistrements il contient ? (avec RecordSet.RecordCount)
Alors inutile de jouer avec les BOF / EOF
Le MoveLast sert à quoi ?

-5- Je ne vois pas de Data1.Open !
Comment as-tu déclaré tes objets ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
22 juil. 2009 à 00:47
Page blanche, aucun signe de vie le prog plante.
Je fais Ctrl + Arrêt Défil pour voir, il me met en jaune dans le Loop :
DataReq.Recordset.MoveNext
et là
I = I + DataReq.Recordset!Pseudo
il me donne :
DataReq.Recordset!Pseudo = < Variable objet ou variable bloc With non définie >
0
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
22 juil. 2009 à 01:18
1- Réponse de l'erreur citée plus haut

2- Code légèrement modifié :
SQL = " SELECT * FROM Utilisateurs "
SQL SQL + "WHERE Articles1 AND Facturation =1 AND Banque =1"

DataReq.DatabaseName = App.Path & "\DataBase.mdb"
DataReq.RecordSource = SQL
DataReq.Refresh

If Not (DataReq.Recordset.BOF And DataReq.Recordset.EOF) Then
DataReq.Recordset.MoveLast
DataReq.Recordset.MoveFirst
Do While Not DataReq.Recordset.EOF
I = I + DataReq.Recordset!Pseudo
DataReq.Recordset.MoveNext
L_AdminName = Pseudo
Loop
Else
L_AdminName = ""
End If
Mais l'erreur se montre toujours au niveau de I = I + DataReq.Recordset!Pseudo
Pourtant j'ai demandé un * FROM

3- La syntaxe L_AdminName = .Fields("Pseudo").Value
Me donne toujours le dernier enregistrement. Voici le code au complet dans le load de mon formulaire :
Data1.DatabaseName = App.Path & "\DataBase.mdb"
Data1.RecordSource = "Utilisateurs"
Data1.Refresh

With Data1.Recordset
.MoveFirst
While Not .EOF
If .Fields("Articles") = "1" _
And .Fields("Facturation") = "1" _
And .Fields("Banque") = "1" _
And .Fields("Comptabilite") = "1" _
And .Fields("DepenseRecette") = "1" _
And .Fields("Clientele") = "1" _
And .Fields("Finance") = "1" _
And .Fields("EmployeurEmploye") = "1" _
And .Fields("Immobilisation") = "1" _
And .Fields("Declaration") = "1" _
And .Fields("Statistiques") = "1" _
And .Fields("Societe") = "1" _
And .Fields("CarnetAdresses") = "1" _
And .Fields("Publipostage") = "1" _
And .Fields("Administration") = "1" _
And .Fields("PanneauConfiguration") = "1" Then
L_AdminName = .Fields("Pseudo").Value
End If
.MoveNext
Wend
End With

4- Si je modifie mon code en :
MoveLast
Désactive le While Not .EOF et le Wend il me ramène toujours au dernier enregistrement.

5- Je ne sais pas cette option :s

ps: Mon enregistrement 1 a le pseudo A
le 2 à le pseudo B (qui est l'Admin
le 3 à le C qui est utilisateur normal comme le A
Je devrais donc avoir la valeur B et non la C comme toutes les fois...
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
22 juil. 2009 à 10:24
Content pour toi, même si la solution est affreuse : Si tu fais tes tests APRES avoir rempli le RecordSet, c'est que tu charges toute la table dans le RecordSet !
C'est une très mauvaise solution, la requète SQL est justement là pour filtrer.

-2- As-tu, dans ta table Utilisateurs, un champ qui s'appelle "Pseudo" (à la min/maj prêt) ?
Parce que ta syntaxe était (presque) correcte.

-3- "J'ai toujours le dernier enregistrement"
Bah oui, puisque tu vas du premier au dernier avec ta boucle !
Dans la syntaxe proposée dans ce -3- :
- Il n'y a pas de test du RecordSet.RecordCount
Cela provoquera une erreur le jour où ce RecordSet sera vide
- La syntaxe exacte de .Fields("LeChamp").Value
Un jour, ça te jouera des tours de vouloir tout abréger

- Général :
Comme dit tous les jours dans ce forum : Il ne faut jamais appeler une variable ou un objet comme son type, ici RecordSet.
Le compilateur aura un jour de la peine à faire la différence et provoquera une erreur qu'il ne sera pas forcément très facile à découvrir.
Ajoute "mon" ou "m" devant le nom de tes variables ou objet

-4- La syntaxe dont je te parle (avec RecordCount à la place de BOF/EOF) est un grand classique que tu peux découvrir dans n'importe quelle source qui traite les DB (ou même dans l'aide VB !) :
With monRecordSet
  If .RecordCount > 0 Then
    .MoveFirst
    Do While Not .EOF
      Debug.Print .Fields("Toto").Value
      .MoveNext
      DoEvents
    Loop
  End If
End With


-5- Tu n'as pas dimensionné tes variables ?
Mauvaise habitude qui te jouera des tours
Oblige toi à les déclarer avant de les utiliser (Option Explicit en tête de page de code)
Ca t'apprendra à bien comprendre la structure des objets que tu utilises, à comprendre l'étendue de tes variables ET SURTOUT à éviter les erreurs qui t'amènent ici régulièrement.
On se reverra, donc

La programmation ne consiste pas à mettre des instructions les unes derrière les autres jusqu'à ce que ça tombe en marche, il faut comprendre un minimum ce qu'on écrit.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Rejoignez-nous