VBA:Un code qui ne marche pas!
voila mon pb:
T_User(login,mot_de_passe)
je voudrait que sur clic au boutons connexion,si le login et le mot de pase sont correct,le formulaire FM_Evaluation s'ouvre sinono au bout d'une 3eme tentitive le programme s'arrete.
mais il me dit erreur:type definie par l'utilisateur non definie au niveau de dim bd as database
Private Sub connexion_Click()
Dim Sql As String
Dim rs As Recordset
Static i As Byte
Dim bd As Database ----> c ici l'erreur
Set rs = bd.OpenRecordset(Sql)
Sql = "SELECT login,[mot_de_passe] FROM T_User WHERE login = '" & Me.txt_user & "' AND [mot_de_passe]='" & Me.txt_pass & "';"
If Not rs.EOF Then
DoCmd.OpenForm "FM_Evaluation", acNormal, , , , acWindowNormal
DoCmd.Close acForm, "F_CONNEXION"
Else
MsgBox "(Identifiant, Mot de Passe) incorrect ", vbInformation, "Connexion"
i = i + 1
End If
If i = 3 Then
MsgBox "Vous avez dépassé le nombre de tentatives autorisés", vbCritical
DoCmd.Quit
End If
Me.Requery
End Sub
24 réponses
Le sujet concerne une connexion en VBA Access où, après vérification du login et du mot de passe, le formulaire FM_Evaluation doit s’ouvrir, sinon le programme s’arrête après trois tentatives. Des erreurs telles que « type défini par l’utilisateur non défini » apparaissent, notamment à la ligne Set rs = bd.OpenRecordset(Sql), faute à une mauvaise déclaration ou à l’ordre des instructions. Plusieurs réponses recommandent de déclarer correctement les objets DAO (par exemple Dim bd As DAO.Database; Set bd = CurrentDb), puis d’initialiser Sql avant d’appeler OpenRecordset et d’utiliser des paramètres compatibles. D’autres suggèrent de déclarer et d’initialiser les objets DAO, puis d’affecter Sql avant d’appeler OpenRecordset, par exemple Set rs = bd.OpenRecordset("SELECT login, [mot_de_passe] FROM T_User", dbOpenDynaset, dbReadOnly).
-
Voila enfin le bon code! ça pourra aider les autres.
Dim msg As String, Titre As String, defval As String
Dim sql As String
Dim bd As Database
Dim Enreg As Recordset
Set bd = CurrentDb()
sql = "Select login, mot_de_passe From T_User Where login = " & """" & Me.txtlogin & """" & " AND mot_de_passe = " & """" & Me.txtpass & """"
'sql = "select distinctrow login,mot_de_passe from T_User "
Set Enreg = bd.OpenRecordset(sql)
If Enreg.EOF Then
MsgBox ("ereur")
Else
DoCmd.OpenForm "FM_Evaluation"
End If
End Sub -
tiens !à l'ouverture du formulaire acceuil le mt de passe est idheo.
si tu veux te balader c'est www.idheo.com -
ecoute, si tu veux que ca marche, zip la bdd et envoie moi ca à sebdoucet@free.fr...
-
Ouah le foutoir la dedans, j'ai pas eu le courrage de tous lire, enfin bon, tu travail sous Access, alors prends ADO et pas DAO pour commencer, respecte aussi une nomenclature un peu plus rigoureuse. Enfin bon, voila comment j'écrirais perso ton code, mais en ADO :
Private Sub connexion_Click()
Dim strSql As String
Static i As Byte
Dim rst As Recordset
strSql = "SELECT login, mot_de_passe FROM T_User WHERE login = " & """" & Me.txt_user & """" & " AND [mot_de_passe]=" & """" & Me.txt_pass & """"
Set rst = New ADODB.Recordset
rst.Open strSql, CurrentProject.Connection, adOpenStatic, adLockReadOnly
If Not rst.EOF Then
DoCmd.OpenForm "FM_Evaluation", acNormal, , , , acWindowNormal
DoCmd.Close acForm, "F_CONNEXION"
Else
MsgBox "(Identifiant, Mot de Passe) incorrect ", vbInformation, "Connexion"
i = i + 1
End If
If i = 3 Then
MsgBox "Vous avez dépassé le nombre de tentatives autorisés", vbCritical
DoCmd.Quit
End If
End Sub
Voila, si ca ne marche pas, vérifie ta requete-
salut lust!
merci pour ton code mais il ne ne marche pas encore
il me met une erreur quand je compile:
ici: rst.Open strSql, CurrentProject.Connection, adOpenStatic, adLockReadOnly
et c'est sur le mot "open" il met: membre de methode ou de donnée introuvable.
j'ai bien mis aussi ADO avec la plus grande priorité
-
-
Putain, j'ai de la peau de sosse devant les yeux !!!!!!!
Je t'ai dis de mettre :
Dim bd As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Corriges celui que tu veux, mais les 2 doivent être pareil...
-
Bon, je comprends pas là :-(
Change la ligne qui génère l'erreur par :
Set rs = bd.OpenRecordset("SELECT login,[mot_de_passe] FROM T_User ",dbOpenDynaset, dbReadOnly)
-
j'ai fais le copier collé ça affiche :
l'erreur 91 :variable objet ou variable de bloc with non definie
: au meme endroit Set rs = bd.OpenRecordset(Sql) -
ContributeurJ'ai jamais dit de mettre dans ce sens!
Et ensuite tu comprendrais peut être un peu mieux si tu n'avais pas posé deux fois la même question!
-
oui!
erreur 91 variable objet ou variable de bloc with non definie:
Private Sub connexion_Click()
Dim Sql As String
Static i As Byte
Dim bd As Database
Dim rs As Recordset
Set db = CurrentDb
Sql = "SELECT login,[mot_de_passe] FROM T_User WHERE login = '" & Me.txt_user & "' AND [mot_de_passe]='" & Me.txt_pass & "';"
Set rs = bd.OpenRecordset(Sql)----> ICI
If Not rs.EOF Then
DoCmd.OpenForm "FM_Evaluation", acNormal, , , , acWindowNormal
DoCmd.Close acForm, "F_CONNEXION"
Else
MsgBox "(Identifiant, Mot de Passe) incorrect ", vbInformation, "Connexion"
i = i + 1
End If
If i = 3 Then
MsgBox "Vous avez dépassé le nombre de tentatives autorisés", vbCritical
DoCmd.Quit
End If
Me.Requery
End Sub-
Bon on va essayé ça, tu fais un copié collé du code ci-dessous, et testes :
Private Sub connexion_Click()
Dim Sql As String
Static i As Byte
Dim bd As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Sql = "SELECT login,[mot_de_passe] FROM T_User ;"
Set rs = bd.OpenRecordset(Sql)
dim nb as integer
nb=rs.recordcount
msgbox nb
end sub()
Ca affiche quoi ?
-
-
penses-tu qu'il faut deja egaler les valeur de login et mot de passe dans la requette?
on peut simplement dire
sql=select login,mot_de_passe from T_User!
et apres on dira
if not EOF T_User
move first
if
txtlogin=login and txtmp=mp
alors open
sinon
msg erreure
i=i+1
movenext.......
pour i=3 quit -
Bon, tu as un message d'erreur ?
-
ça tourne pas les gard!
franchement je comprend plus rien une journée entierre! je suis bete ou c'est difficile à faire -
Non, Teebo t'as dit ce que je t'ai dit ici : http://www.commentcamarche.net/forum/affich-2108400-vba-formulaire-securise#5
Alors ca tourne ? -
Si tu lui dit Set rs = bd.OpenRecordset(Sql) , il contient quoi le rs ?
Que neni, nada, il ne connait pas sql, il sait juste que c'est une chaine de caractère, plus précisemment que tu l'as déclaré en tant que telle.
Alors ça donne quoi ?
-
bah! c ce que j'ai fait avant mais
teebo m'a dit que c'est en l'envers il faut mettre le set avant le sql. -
Re,
Je pense que l'on va y arriver :O)
Tu mets :
Set rs = bd.OpenRecordset(Sql)
et ensuite tu mets sql="....."
Ca ne peut pas aller, faut lui dire avant ce que contient ton sql.
-
Private Sub connexion_Click()
Dim Sql As String
Dim rs As DAO.Recordset
Static i As Byte
Dim bd As DAO.Database
Set db = CurrentDb
Set rs = bd.OpenRecordset(Sql)
Sql = "SELECT login,[mot_de_passe] FROM T_User WHERE login = '" & Me.txt_user & "' AND [mot_de_passe]='" & Me.txt_pass & "';"
If Not rs.EOF Then
DoCmd.OpenForm "FM_Evaluation", acNormal, , , , acWindowNormal
DoCmd.Close acForm, "F_CONNEXION"
Else
MsgBox "(Identifiant, Mot de Passe) incorrect ", vbInformation, "Connexion"
i = i + 1
End If
If i = 3 Then
MsgBox "Vous avez dépassé le nombre de tentatives autorisés", vbCritical
DoCmd.Quit
End If
Me.Requery
End Sub -
tu peux remettre ton code modifié que l'on y voit plus clair STP ?
-
eh! oui je l'ai oublié mais
bon ça ne marche toujours pas ça met l'erreur 91 que j'ai enoncé au dessus.c'est vraiment chiant -
Bon, il faut mettre dao aussi sur ton rs je pense.
Donc : Dim rs As dao.Recordset
- 1
- 2