[VBA] formulaire de securité

Fermé
Théo - 9 juin 2005 à 10:28
WhiteFang Messages postés 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008 - 13 juin 2005 à 15:27
Salut tou le monde !

Voila donc je suis actuellement en stage de premiere année bts info gestion developpeur d'application. Dans l'application Access 97 que je cré, je dois incoperais un formulaire de securité (Utilisateur, Mot de Passe) et je ne vois vraiment pas comment gerer sa par rapport a ma table securité contenant les infos user et mdp.

Donc g un bouton OK qui doit verifier par une requete si les données entré ds les champs utilisateur et mot de passe son correct pour ouvrir un autre formulaire ou dans le cas contraire envoyé un MsgBox.

Merci d'avance pour vos réponses !!!

28 réponses

WhiteFang Messages postés 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008 204
9 juin 2005 à 13:36
;-)

Dans ton bouton OK, tu ouvres, via VBA, ta table sécurité, et tu vérifies les champs avec une boucle, que tu compare à tes zones de texte...

;-)
0
Ok mais c justement sa que j'aimerais connaitre,

je fais ma connection a la base de donnée (.Open Current Project.Connection)

mais en suite je vois pas comment ouvrir les champs de la table et comment les comparés a ceux du formulaire. et comment faire pour qu'il compare les mots de passe par rapport au nom de l'utilisateur entré !

dsl si je suis chiant mais je m'y connais pas en VBA !!!

merci pour vos reponses !
0
WhiteFang Messages postés 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008 204 > Théo
9 juin 2005 à 15:21
;-)

On va dire que, dans ton formulaire, tu as les objets suivants :

1 table qui s'appelle "Sécurité", avec les champs NomUtil qui contient le nom de l'utilisateur et Pswd qui contient le password...

Dans ton formulaire :
1 zone de texte qui contient le nom de l'utilisateur nommée : Txt_NomUtilisateur
1 zone de texte qui contient le mot de passe nommée : Txt_Password
1 bouton OK : Btn_OK

Tu mets ce code dans l'événement _Click de Btn_OK :

Dim LaTable, Cpt, NomUtilisateur, MotDePasse
Set LaTable = CurrentDb.OpenRecordset("Sécurité")
LaTable.MoveLast
LaTable.MoveFirst
For Cpt = 1 To LaTable.RecordCount
NomUtilisateur = LaTable.NomUtil
MotDePasse = LaTable.Pswd
If Me.Txt_NomUtilisateur = NomUtilisateur Then
If Me.Txt_Password = MotDePasse Then
LaTable.Close
DoCmd.OpenForm (LeFormulaire)
Unload Me
End If
End If
Next
LaTable.Close
-------------------------------------

Ca ouvre la table sécurité, le MoveLast/MoveFirst sont là pour alimenter automatiquement le Recordcount de la table et pour la boucle...
Ensuite, cela compare le contenu des champs de la table avec le contenu des zones de texte...
Si cela correspond, on ferme la table ouverte, on ouvre le bon formulaire et ça ferme ton formulaire de sécurité...

;-)
0
Théo > WhiteFang Messages postés 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008
9 juin 2005 à 15:31
Quand tu dis "LaTable" sa correspond a la table securite ?
et donc quand tu dis "Sécurité" sa correspond au formulaire d'identification ?
Sinon le "Cpt" et le "Me" sa correspoond a koi ?


En tout cas merci de ton aide je v essayer sa tout de suite.
0
WhiteFang Messages postés 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008 204 > Théo
9 juin 2005 à 15:41
;-)

"LaTable" est une variable "objet" qui pointe sur la vraie table physique...

"Sécurité" c'est le vrai nom de ta table sécurité....

"Cpt" c'est une variable qui sert pour le compteur (elle va prendre successivement les valeurs 1,2,3... jusqu'au total des enregistrements de la table....

"Me", c'est l'objet en cours/actif, en l'occurence, ton formulaire sécurité...

;-)
0
Théo > WhiteFang Messages postés 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008
9 juin 2005 à 15:52
Donc j'ai mi ça :

Dim LaTable As Database
Dim Cpt As Integer
Dim NomUtilisateur As String
Dim MotDePasse As String

Set LaTable = CurrentDb.OpenRecordset("securite")
LaTable.MoveLast
LaTable.MoveFirst
For Cpt = 1 To LaTable.RecordCount
NomUtilisateur = LaTable.NomUtil
MotDePasse = LaTable.Pswd
If Me.Txt_NomUtilisateur = NomUtilisateur Then
If Me.Txt_Password = MotDePasse Then
LaTable.Close
DoCmd.OpenForm ("Gestio du Régime Indemnitaire")
Unload Me
End If
End If
Next
LaTable.Close

Et il me met un message d'erreur sur le .MoveLast en disant:
Membre de méthode ou de données introuvable
0
WhiteFang Messages postés 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008 204
9 juin 2005 à 16:01
;-))

Remet la ligne DIM comme elle était !! ;-)))

;-))))
0
ok sa marche a peu prés, mais maintenant i me met une message microsoft visual basic
erreur d'exécution '361'
Impossible de charger ou de décharger cet objet

quand je clic sur deboguage il me met l'erreur sur le "Unload Me"
0
c bon g reussi a corriger l'erreur en retirant
"Unload Me" et "LaTable.Close"

En tout cas merci beaucoup pour ton aide tu as assuré, meme si c pas simple de m'expliquer un truc chui du genre a rien comprendre enfin tu l'as remarqué ^^

Merci Man !
0

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

Posez votre question
WhiteFang Messages postés 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008 204
9 juin 2005 à 16:33
;-))))

Tu avais une erreur sur "LaTable.Close" ???

0
oui qd g supprime le Unload Me, il a mi la mm erreur sur LaTable.close donc g sup aussi et sa fonctionne
0
une dernière question steup.

dans la declaration des variables:
Dim LaTable, Cpt, NomUtilisateur, MotDePasse

Pourquoi on met tou a la suite et pourquoi on declare pas de type ?
Et pourquoi quand g tout declarer separerment sa marchait pas ?
0
WhiteFang Messages postés 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008 204
9 juin 2005 à 17:40
;-)

Je met tout à la suite et je ne déclare rien quand il s'agit de petit bidules, question appli VBA.... Quand on dit rien, le type par défaut est VARIANT, qui prend un peu plus de mémoire, mais on s'en fous car ce ne sont que de petits bidules en VBA, et comme les ressources sont libérées au "End Sub", cela permet de donner une aide à ceux qui sont un peu dans la panade sans avoir à leur donner de cours magistral sur la programmation et l'état de l'art....

C'est pour aider... Ensuite, le petit gars/fille qui vient là pour crier "à l'aide", il a tout le temps, avec le code qu'on lui donne, pour ensuite faire un joli ptit code bien propre et économique en ressources, bref, un bon petit développeur... Touche F1 à fond !! ;-)))

Les bons, ils n'ont pas besoin de notre aide... ;-))))))))))))

Et quand tu dis rien, l'avantage du VARIANT, c'est de s'adapter à tous les types de données.... Pas de prise de tête pour un débutant....

;-)
0
Ok merci !

L'element LaTable c une table fictive qui va recevoir les elements de la table securite ?

Et sinon sur le formulaire suivant, j'ai mi un champ qui affiche le nom de l'utilisateur connecté, pour le moment pas de prob sa fonctionne bien. Mais quand g ajouté la ligne qui ferme le formulaire securité a la connexion d'un utilisateur, le champ utilisateur du second formulaire ne reçoit plus les données utilisateur du premier formulaire.

Tu as pas une idée ?
0
WhiteFang Messages postés 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008 204
10 juin 2005 à 09:42
;-)

LaTable : Oui, c'est un variable de type OBJET, qui fait référence à la vraie table, avec toute la structure (champs...)

Pour le nom de l'utilisateur : Utilise une variable "Public", dans un module, cela la rendra accessible par TOUT ton projet VBA...

Ex : Public NomUtilisateur -As String si tu veux ;-)-

Ensuite, dans ton fomulaire : Txt_Utilisateur=NomUtilisateur

;-)
0
Donc g créer le module avec pour code:

Option Compare Database
Public NomUtilisateur As String

Private Sub txt_Utilisateur_BeforeUpdate(Cancel As Integer)
txt_Utilisateur = NomUtilisateur
End Sub

Mais sa marche pas

Et sinon g un autre probleme, c quand je ve mettre plusieurs utilisateur dans ma table securite, le cpt du formulaire securite ne doit pas voir les autre ligne car il me ferme la page au lieu d'ouvrir le second formulaire
0
UP
0
WhiteFang Messages postés 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008 204
10 juin 2005 à 15:05
;-)

Pourquoi l'événement BeforeUpdate ?
0
il a mi sa automatiquement quand g voulu créer mon code sur le champ txtUtilisateur du deuxième formulaire.

sinon c pas grave je v laisser le premier formulaire ouvert mais je ferais en sorte que le second se mette devant pour pas qu'on y accede ^^
enfin bref camouflage !
0
WhiteFang Messages postés 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008 204
10 juin 2005 à 15:32
;-)

Tu aurais dû utiliser une étiquette, pas une zone de texte...

;-)
0
Je fais comment avec une étiquette ???
0
WhiteFang Messages postés 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008 204
10 juin 2005 à 15:47
Tu utilises la propriété Caption

Ex : Me.Etq_UserName.Caption =xxx

Ou direct depuis l'autre formulaire : Forms(xxx).Etq_UserName.Caption=xxx
0
cool sa marche merci :)

sinon tu c pas cmmt je peux faire pour gerer plusieurs utilisateur ?
parce que si je met dropp utilisateur dans la table securite, sa ne marche pas.
0
WhiteFang Messages postés 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008 204
10 juin 2005 à 18:07
;-)

Week-end !! ;-)))))))))

La suite Lundi.... ;-)
0
Voila on est lundi !!! ;)
0
WhiteFang Messages postés 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008 204
13 juin 2005 à 09:36
;-)

Un dropp utilisateur ? Wat is dat ?

Qu'entends tu par gérer plusieur utilisateurs ?

;-)
0
sinon tu c pas cmmt je peux faire pour gerer plusieurs utilisateur ?
parce que si je met dropp utilisateur dans la table securite, sa ne marche pas.

lol dsl fatigue de fin de semaine je voulais dire:
parce que si je met ... euh en faite je c plus ce que je voulais dire lol

Donc si je me souvient le probleme etait avec le Cpt, quand je veut mettre plusieur utilisateur dans ma table securite. et que par exemple je ve me connecter avec le second utilisateur il ne me lance pas le second formulaire et parfois il me met une erreur sur le:
For Cpt= 1 To vLaTable.RecordCount

voila sa devrait etre plus clair.

Sinon qd g plus d'un utilisateur dans ma table et que je v tester mon msgbox "Nom d'utilisateur ou mot de passe incorrect"
il m'affiche le message autant de fois qu'il y a d'utilisateur.

merci d'avance pour ton aide.
0
WhiteFang Messages postés 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008 204
13 juin 2005 à 10:04
;-)

Ta base, c'est du confidentiel ? Passke c'est vrai, avec le temps, on arrive à se mélanger les pinceaux, et tu pourrais me l'envoyer que je vois tout ça avec mes yeux à moi... Mais bon.. Faut pas qu'elle soit trop grosse non plus ;-)

;-)
0