Lien VB - Base Access

Résolu
tapas64 Messages postés 33 Date d'inscription vendredi 27 février 2004 Statut Membre Dernière intervention 14 novembre 2004 - 16 juil. 2004 à 10:50
tapas64 Messages postés 33 Date d'inscription vendredi 27 février 2004 Statut Membre Dernière intervention 14 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

12 réponses

tryvb Messages postés 10 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 16 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. ?
3
cs_PhilippeE Messages postés 437 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 10 août 2010 2
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 & ""')"
3
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
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

It@li@
3
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
16 juil. 2004 à 15:38
le plus simplement, colles ca avant mon code ci dessus :

Set db = OpenDatabase(CheminBase) ' Définition base de donnée

en remplacant CheminBase par le chemin complet de ta Base
Ex ="C:\MABAse.mdb")

N'oublies pas de cocher..Projet...Références....Microsoft DAO 3.51 Object Library

It@li@
3

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

Posez votre question
tapas64 Messages postés 33 Date d'inscription vendredi 27 février 2004 Statut Membre Dernière intervention 14 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
3
el_teedee Messages postés 497 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 13 juillet 2015 9
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...

++
0
cs_PhilippeE Messages postés 437 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 10 août 2010 2
16 juil. 2004 à 14:13
Vu la fiabilité du RecordCount (ça dépend des paramètres d'ouverture), je te suggère de remplacer ta ligne
If RCD_record.RecordCount <> 1 Then

par
If RCD_record.BOF Then
0
tapas64 Messages postés 33 Date d'inscription vendredi 27 février 2004 Statut Membre Dernière intervention 14 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".

Qu'est ce que je fais de travers?
Merci

tapas64
0
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
16 juil. 2004 à 15:39
le plus simplement, colles ca avant mon code ci dessus :

Set db = OpenDatabase(CheminBase) ' Définition base de donnée

en remplacant CheminBase par le chemin complet de ta Base
Ex ="C:\MABAse.mdb")

N'oublies pas de cocher..Projet...Références....Microsoft DAO 3.51 Object Library

It@li@
0
tapas64 Messages postés 33 Date d'inscription vendredi 27 février 2004 Statut Membre Dernière intervention 14 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

Merci
tapas64
0
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
16 juil. 2004 à 16:19
tu viers tes lignes tu ne laisses que les miennes

It@li@
0
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
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..

It@li@
0
Rejoignez-nous