tapas64
Messages postés33Date d'inscriptionvendredi 27 février 2004StatutMembreDernière intervention14 novembre 2004
-
16 juil. 2004 à 10:50
tapas64
Messages postés33Date d'inscriptionvendredi 27 février 2004StatutMembreDernière intervention14 novembre 2004
-
16 juil. 2004 à 17:26
Slt tout le monde.
Voilà je réalise un programme vb qui utilise une base Access. Dans cette base il y a 2 tables, une table Médecin avec un codeM, un NomM etc, et une table Identification qui contient codeM et MotDePasseI.
L'utilisateur entre donc son nom et son mot de passe et voilà le code que j'ai écrit lorsqu'il clique sur le bouton Connexion.
' Avec la table MEDECIN
With Data1.Recordset
'Tant que ce n'est pas le dernier enregistrement
Do While Not .EOF
'Comparer la valeur du champ login avec celle du NomM dans la base
If Login.Text = .Fields("NomM") Then
'Si elles sont égales, mettre la valeur du champ login dans une variable temporaire
temp = .Fields("NomM")
'et récupérer le code correspondant à ce login
codeMedecin = .Fields("CodeM")
End If
'Sinon lire l'enregistrement suivant
.MoveNext
Loop
End With
'Si à la sortie de la boucle, temp est vide, ça veut dire que le login n'a pas été trouvé
If temp = "" Then
d = MsgBox("Ce login n'existe pas!", , "Erreur!")
Login.Text = ""
MDP.Text = ""
Else 'Si temp n'est pas vide, on compare les mots de passe
'Avec la table Table1
With Data2.Recordset
'Tant que ce n'est pas le dernier enregistrement
If .EOF = False Then
'Comparer la valeur du codeMedecin obtenu avec chacun des codes de la base
If .Fields("CodeM") = codeMedecin Then
'Quand c'est le bon, recupérer le mot de passe correspondant à ce code
motDePasse = .Fields("MotDePasseI")
Else 'ici''''''''''''
'Sinon, passer à l'enregistrement suivant
.MoveNext
End If
Else
MsgBox "Fin de la table"
End If
End With
'Si à la sortie de la boucle, motDePasse est vide, c'est que ce login n'a pas de mdp
If motDePasse = "" Then
b = MsgBox("Erreur dans la base de données!", , "Erreur!")
Else
'Sinon, on peut comparer maintenant le mot de passe récupéré
'avec celui saisi dans le champ mdp de la fenêtre
If MDP.Text = motDePasse Then
'Ouvrir la fenêtre du menu principal
Fenetre2.Show
'Décharger la fenêtre de connexion
Unload Fenetre1
Else
c = MsgBox("Mauvais mot de passe", , "Erreur!")
MDP.Text = ""
End If
End If
'Fin du If temp=""
End If
Le problème c'est qu'il ne lit que le premier enregistrement de la table Médecin et ne reconnait donc pas les autres mots de passe.
J'ai beau relire je ne vois pas l'endroit où ca plante.
Est-ce que quelqu'un pourrait m'aider svp?
Merci
tapas64
tryvb
Messages postés10Date d'inscriptionjeudi 10 juin 2004StatutMembreDernière intervention16 juillet 2004 16 juil. 2004 à 11:06
Je ne comprend pas très bien pourquoi tu ne fait pas une requete SQL ou tu selectionnerai le nom d'utilistateur where le mot de passe= mot de passe rentré. Dans le cas ou il y a un résultat à ta requete s'est que l'utilisateur existe dans la base sinon il n'est pas présent. ?
cs_PhilippeE
Messages postés437Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention10 août 20102 16 juil. 2004 à 11:17
Pareil que tryvb
Une requête dans le style serait plus simple"SELECT * FROM Médecin, Identification WHERE (Médecin.codeM Identification.codeM) AND (Médecin.NomM '"" & LeNomDuMedecin & ""') AND (Identification.MotDePasseI = '"" & LePasseSaisi & ""')"
cs_ITALIA
Messages postés2169Date d'inscriptionvendredi 20 avril 2001StatutMembreDernière intervention30 juin 20099 16 juil. 2004 à 14:49
Set RCD_Record = db.OpenRecordset("SELECT * FROM PASSWORD WHERE MotDePasseI = ' " & TextPass & " ' and CodeM = ' " & TextPass & " ' ")
RCD_Record.MoveLast
Nb=RCD_Record.RecordCount
RCD_Record.MoveFirst
If Nb= 0 Then
MsgBox ("L'utilisateur n'est pas déclaré !")
Exit Sub
Else
Fenetre2.Show
Unload Me
End If
tapas64
Messages postés33Date d'inscriptionvendredi 27 février 2004StatutMembreDernière intervention14 novembre 2004 16 juil. 2004 à 17:26
Ca y est!
Voilà finalement le code qui marche:
Dans un module:
---------------------
Public db As DAO.Database
Public rs1, rs2 As DAO.Recordset
Dans la méthode Activate de la fenetre où l'utilisateur saisit son login et son mot de passe:
---------------------------------------------------------------------------------
'Ouverture de la base
Set db = DAO.Workspaces(0).OpenDatabase(App.Path & MA_BASE_ACCESS, False, False)
Et dans la méthode Click du bouton Connexion:
------------------------------------------------------------
'Vérifier la saisieIf Login.Text "" Or MDP.Text "" Then
e = MsgBox("Un des champs est vide!", , "Erreur!")
Else
LeNomDuMedecin = Login.Text
Fenetre2.MP_Login.Text = LeNomDuMedecin
LePasseSaisi = MDP.TextSet rs1 db.OpenRecordset("SELECT * FROM [MEDECIN], [IDENTIFICATION] WHERE [MEDECIN].[NomM] '" + LeNomDuMedecin + "' AND [IDENTIFICATION].[MotDePasseI] = '" + LePasseSaisi + "';", , dbForwardOnly)
Do While Not rs1.EOF
rs1.MoveNext
Loop
Nb = rs1.RecordCount
If Nb = 0 Then
MsgBox ("L'utilisateur n'est pas déclaré!")
Exit Sub
Else
Fenetre2.Show
Unload Me
End If
'Fin du if qui vérifie la saisie
End If
Ca a été laborieux mais ca marche enfin. Merci à tout le monde
tapas64
el_teedee
Messages postés497Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention13 juillet 20159 16 juil. 2004 à 12:56
Lut, moi je fais a peu pres la meme chose avec une table EMPLOYE et une table PASSWORD.
mon accueil contient 2 textbox "TextLogin" et 'TextPassword".
voila la requete que j'utilise, et ca marche :
Set RCD_record db.OpenRecordset("SELECT * FROM PASSWORD WHERE Login '" & TextLogin & "'")
If RCD_record.RecordCount <> 1 Then
MsgBox ("L'utilisateur n'est pas déclaré !")
Exit Sub
End If
^^ j'espere que je dis pas de connerie, car je prog sous access que depuis 2 semaines...
tapas64
Messages postés33Date d'inscriptionvendredi 27 février 2004StatutMembreDernière intervention14 novembre 2004 16 juil. 2004 à 15:26
Merci de vos réponses.
C'est un peu la galère lol. J'ai testé la méthode de la requête sql ms il plante.
Je pense que déjà je m'y prends mal pour la connexion à la base.
Voilà ce que j'ai mis:
=> Dans un module:
---------------------------
Public basecourante As String 'le chemin de la base de données
Public Cx As ADODB.Connection 'acces a la base
Public rs_connexion As ADODB.Recordset 'pour operer sur la base
Public sql_requeteConnexion As String 'requete sql
=>Au chargement de la toute première fenêtre:
-------------------------------------------------------------
'init du chemin la base
basecourante = App.Path & "\bd1.mdb"
'init de la connexion et ouverture
Set Cx = New ADODB.Connection
Cx.Mode = adModeReadWrite
Cx.Provider = "Microsoft.jet.OLEDB.4.0"
Cx.Open basecourante
'init du recordset
Set rs_connexion = New ADODB.Recordset
rs_connexion.CursorLocation = adUseClient
'init de la requete SQLsql_requeteConnexion "select * from [MEDECIN], [IDENTIFICATION] where [MEDECIN].[CodeM] IDENTIFICATION.CodeM and MEDECIN.NomM= "" & LeNomDuMedecin & "" and IDENTIFICATION.MotDePasseI= "" & LePasseSaisi & "";"
Et si ensuite j'essaie ca:
rs_connexion.Open sql_requeteConnexion, Cx, adOpenForwardOnly, adLockOptimistic
il me dit "Un objet est requis".
tapas64
Messages postés33Date d'inscriptionvendredi 27 février 2004StatutMembreDernière intervention14 novembre 2004 16 juil. 2004 à 16:02
Merci.
J'ai suivi tes conseils et j'ai mis ce code dans la méthode click:
LePasseSaisi = MDP.TextSet rs1 db.OpenRecordset("SELECT * FROM IDENTIFICATION, MEDECIN WHERE IDENTIFICATION.CodeM MEDECIN.CodeM and MotDePasseI = ' " & LePasseSaisi & " '; ")
rs1.MoveLast
Nb = rs1.RecordCount
rs1.MoveFirst
If Nb = 0 Then
MsgBox ("L'utilisateur n'est pas déclaré !")
Exit Sub
Else
Fenetre2.Show
Unload Me
End If
Mais maintenant il me dit qu'il n'y a pas d'enregistrement courant.
Dans le module:
Public db As DAO.Database
Public rs1, rs2 As DAO.Recordset
cs_ITALIA
Messages postés2169Date d'inscriptionvendredi 20 avril 2001StatutMembreDernière intervention30 juin 20099 16 juil. 2004 à 16:21
Pas de :
-------------------------------------------------
Public db As DAO.Database
Public rs1, rs2 As DAO.Recordset
----------------------------------------------------
n'oublies pas qd c ok de coché reponse acceptée..