interoger BD/ VBA/ DAO

interoger BD/ VBA/ DAO - VB/VBA/VBS - Programmation

Marsh Posté le 21-04-2005 à 16:43:56    

bonjour, j'aimerai savoir comment interroger une base de donnée (sur access 97) en VBA :  
en fait, j'ai créer une fenêtre d'authentification (donc un formulaire), et je voudrai pouvoir rentrer un login, un Mot de passe, puis cliquer sur le bouton Valider pour acceder à un autre formulaire. mon idée serait de stocker ma requete SQL dans un integer. si le résultat de la requête ne me renvoi rien, c'est que je n'ai pas rentré le bon mot de passe ou le bon login (aou autre) , donc j'affiche une MSGbox erreur. sinon, je passe au formulaire voulu. j'ai une table utilisateur avec entre autre les champs LoginU et PasswordU, puis j'ai mon formulaire Authtentification. ma requête serait très sipmle :
 
select numU,loginU from Utilisateur where numU='me.champ_utilisateur' and loginU='me.champ_mdp'
 
les 2 noms entre cote étant les nom que j'ai donné aux deux champs à remplir de mon formulaire d'authentification.
 
voila, pour l'instant, mon code ressemble à ca (je me suis inspirer d'exemple), mais ca ne marche pas (et c normal). Merci d'avance pour les idées.
 
Private Sub Commande6_Click()
Dim rstUtil As DAO.Recordset
Dim dbs As Database
Dim strSQL As Integer
Set dbs = CurrentDb
Set rstUtil = dbs.OpenRecordset("Utilisateur", dbOpenTable)
strSQL = "LA JE MET MA REQUETE"
ici, je voudrai bien récuperer le résultat de la requete et le stocker dans un int
rstUtil.Close
End Sub
 
 
 

Reply

Marsh Posté le 21-04-2005 à 16:43:56   

Reply

Marsh Posté le 21-04-2005 à 17:03:30    

Houlà  :sweat:  
 
Pas tout simple de comprendre ce que tu veux faire... Bonjour les fautes de français :)
 
Bon, en gros, ce qu'il faut savoir c'est que le résultat d'une requête, tu le récupères dans un recordset, pas dans un int... Comment voudrais-tu stocker des valeurs de champs (2 dans ton cas) dans un int? Sachant qu'une requête peut, potentiellement mais ce n'est pas ton cas, retourner plusieurs lignes?
 
Bref, je ne peux que te conseiller de potasser un peu tes bouquins sur les DB...
 
Désolé d'être un peu dur mais là y a trop d'erreurs de base

Reply

Marsh Posté le 21-04-2005 à 17:11:23    

ok, c'est ce que je suis en train de faire. je vé chercher, et tester. je te tiens au courant.

Reply

Marsh Posté le 21-04-2005 à 18:09:36    

j'en suis la, mais je t'avoue que maintenant je ne sais plus quoi faire : je ne sais pas comment utiliser le résultat que me donne cette requete.
 
Private Sub Commande6_Click()
Dim dbs As DAO.Database
Dim rstU As DAO.Recordset
Dim rstSQL As String
'création du recorSet
Set dbs = CurrentDb
Set rstU = dbs.OpenRecordset("Utilisateur", dbOpenDynaset)
'requête
rstSQL = "SELECT Utilisateur.loginU,Utilisateur.passwordU FROM Utilisateur" _
& "WHERE (Utilisateur.loginU='" & Me.champ_utilisateur & "' and Utilisateur.passwordU='" & Me.champ_mdp & "')"
End Sub

Reply

Marsh Posté le 21-04-2005 à 19:40:04    

Salut,
En fait il te reste à vérifier si ta requête te retourne un résultat.  Si tu fait un test sur EOF tu vas avoir ta réponse.  S'il est sur EOF c'est donc que ta rêquête est vide et que soit le mot de passe ou soit le nom d'utilisateur n'existe pas.  S'il y a quelque chose c'est qu'il a trouvé quelqu'un et donc son mot de passe et son code utilisateur sont valide et tu peux continuer.
 
En espérant que ca t'aide
Athena

Reply

Marsh Posté le 22-04-2005 à 08:41:55    

le_bob75 a écrit :

j'en suis la, mais je t'avoue que maintenant je ne sais plus quoi faire : je ne sais pas comment utiliser le résultat que me donne cette requete.
 
Private Sub Commande6_Click()
Dim dbs As DAO.Database
Dim rstU As DAO.Recordset
Dim rstSQL As String
'création du recorSet
Set dbs = CurrentDb
Set rstU = dbs.OpenRecordset("Utilisateur", dbOpenDynaset)
'requête
rstSQL = "SELECT Utilisateur.loginU,Utilisateur.passwordU FROM Utilisateur" _
& "WHERE (Utilisateur.loginU='" & Me.champ_utilisateur & "' and Utilisateur.passwordU='" & Me.champ_mdp & "')"
End Sub


 
Pourquoi est-ce que tu crées un recordset Utilisateur? Utilise plutôt ta requête sql pour créer le recordset... et là tu teste soit le nb d'enregistrements, soit effectivement le EOF. Dans les deux cas, tu sauras si l'utilisateur existe ou a rentré les bonne valeurs dans les champs user et password.
 
Ton premier recordset ne sert à rien

Reply

Marsh Posté le 22-04-2005 à 09:48:58    

ok, je vais essayer ton idée. sinon, j'ai une autre petite question : j'utilise access 97 au boulot, est ce que tu penses vraiment que les version 2000 et + sont mieux pour créer des applications professionelles ?? par exemple, j'ai vu que la version 97 ne peut utiliser que DAO pour acceder aux objet, alors que les version + récentes utilise ADO. d'après ce que j'ai entendu, le code est plus simple à écrire avec ADO. qu'en penses tu ?

Reply

Marsh Posté le 22-04-2005 à 10:05:48    

Pour moi, la simple raison que Office 97 ne soit plus supporté (ou bientôt plus) par Microsoft est une excellente raison de passer sous 2000.
 
Maintenant concernant l'ADO, je ne sais pas si c'est plus simple à écrire que le DAO (me souviens plus comment ça fonctionne). Par contre, c'est plus rapide. Bon remarque avec l'arrivée de .net, je suis pas sûr que l'ADO vive encore longtemps...

Reply

Marsh Posté le 22-04-2005 à 14:21:35    

en fait le problème, c'est que je ne sais pas comment utiliser cette requetepour créer le recordset. donc je suis bloké. j'ai cherché, mais en vain

Reply

Marsh Posté le 22-04-2005 à 15:01:02    

j'ai ce code la, mais il me met une erreur à l'execution:
 
Private Sub Commande6_Click()
Dim dbs As DAO.Database
Dim rstSQL As String
Dim r As QueryDef
'création du recorSet
Set dbs = CurrentDb
'requête
rstSQL = "SELECT Utilisateur.loginU,Utilisateur.passwordU FROM Utilisateur" _
& "WHERE (Utilisateur.loginU='" & Me.champ_utilisateur & "' and Utilisateur.passwordU='" & Me.champ_mdp & "')"
Set r = dbs.CreateQueryDef("", rstSQL)
r.OpenRecordset
If IsNull(r) Then
MsgBox "Le login ou le mot de passe est incorrect", vbCritical, "Erreur"
End If
End Sub

Reply

Marsh Posté le 22-04-2005 à 15:01:02   

Reply

Marsh Posté le 22-04-2005 à 15:32:13    

le_bob75 a écrit :

j'ai ce code la, mais il me met une erreur à l'execution:
 
Private Sub Commande6_Click()
Dim dbs As DAO.Database
Dim rstSQL As String
Dim r As QueryDef
'création du recorSet
Set dbs = CurrentDb
'requête
rstSQL = "SELECT Utilisateur.loginU,Utilisateur.passwordU FROM Utilisateur" _
& "WHERE (Utilisateur.loginU='" & Me.champ_utilisateur & "' and Utilisateur.passwordU='" & Me.champ_mdp & "')"
Set r = dbs.CreateQueryDef("", rstSQL)
r.OpenRecordset
If IsNull(r) Then
MsgBox "Le login ou le mot de passe est incorrect", vbCritical, "Erreur"
End If
End Sub


 
Où se situe ton erreur et quel est le message? Donne plus de précisions si tu veux qu'on t'aide de manière efficace :)
Je ne me souviens plus trop comment fonctionne DAO mais à vue de nez le code d'ouverture du recordset me paraît correct.
Ce qui ne marche certainement pas, c'est la ligne

Code :
  1. If IsNull(r) Then


Ton recordset ne peut pas être null puisque tu viens de l'ouvrir avec la ligne précédente!
Comme le disait Athena159 et moi-même, ce que tu dois tester c'est soit l'état EOF (End Of File), soit le nb de recordset pour savoir si ta requête renvoie qqch ou pas.

Reply

Marsh Posté le 22-04-2005 à 15:43:58    

mon erreur est du type : erreur de syntaxe (opérateur absent)dans l'expression...la il m'écrit ma requête. quand j'appuie sur déboguage, il me surligne en jaune la ligne
Set r = dbs.CreateQueryDef("", rstSQL), donc la je suis 1 peu perdu

Reply

Marsh Posté le 22-04-2005 à 16:20:15    

le_bob75 a écrit :

mon erreur est du type : erreur de syntaxe (opérateur absent)dans l'expression...la il m'écrit ma requête. quand j'appuie sur déboguage, il me surligne en jaune la ligne
Set r = dbs.CreateQueryDef("", rstSQL), donc la je suis 1 peu perdu


 
Ah ben oui :)
Forcément j'avais pas vu ça... Tu t'enmêles les pinceaux dans les différents type toi... r doit être défini comme un DAO.Recordset
 

Reply

Marsh Posté le 25-04-2005 à 09:44:26    

salut, j'ai toujours la même erreur qui m'empoisonne la vie : à mon avis, c'est 1 problème dans la requête. il n'accepte pas queqlque chose à partir du where, mais je ne trouve pas.

Reply

Marsh Posté le 25-04-2005 à 09:47:37    

Essaie plutôt ça alors:  

Code :
  1. rstSQL = "SELECT Utilisateur.loginU,Utilisateur.passwordU FROM Utilisateur" _
  2. & "WHERE (Utilisateur.loginU='" & Me.champ_utilisateur.Text & "' and Utilisateur.passwordU='" & Me.champ_mdp.Text & "');"


 
A mon avis le ';' à la fin est pas très utile... Mais bon, on ne sait jamais.
 
Si ça ne fonctionne toujours pas, redonne ton code, le msg d'erreur exact et à quel moment il survient...
 
A+

Reply

Marsh Posté le 25-04-2005 à 10:19:57    

voici mon code, la j'ai une nouvelle erreur, mais je pense que cela vient du .Text rajouté à la fin des champs dans la requête :
 
Private Sub Commande6_Click()
Dim dbs As DAO.Database
Dim rstSQL As String
Dim r As DAO.QueryDef
 
'création du recorSet
Set dbs = CurrentDb
 
'requête
rstSQL = "SELECT Utilisateur.loginU,Utilisateur.passwordU FROM Utilisateur" _
& "WHERE (Utilisateur.loginU='" & Me.champ_utilisateur.Text & "' and Utilisateur.passwordU='" & Me.champ_mdp.Text & "');"
Set r = dbs.CreateQueryDef("", rstSQL)
r.OpenRecordset
 
If IsNull(r) Then
MsgBox "Le login ou le mot de passe est incorrect", vbCritical, "Erreur"
End If
End Sub
 
 
ici, lorsque j'execute (je tape mon login, puis un mot de passe),et j'appui sur mon bouton valider, j'ai le message d'erreur suivant : erreur d'execution '2185' : Impossible de faire référence à une propriété, ou de la définir pour un contrôle, si ce dernier n'est pas activé. il me dise ensuite d'essayer l'une des opérations suivantes : activez le contrôle avant de faire référence à la propriété (utiliser setFocus), ou bien :
Faites référence à la propriété, oou définissez la depui une macro ou 1 procedure evenementielle (Gotfocus)
 
si j'enlève les .Text, je revien à mon erreur classique de vendredi : erreur d'execution '3131' Erreur de syntaxe dans la clause FROM, et quand je clique sur débogage, il me surligne la ligne :
 
Set r = dbs.CreateQueryDef("", rstSQL)
 
voila, je vais continuer à creuser de mon coté, merci pour ton aide en tout cas.
 
salut

Reply

Marsh Posté le 25-04-2005 à 11:05:49    

toujours rien, je commence à desesperer, j'ai rajouter les 2 lignes de codes suivantes :
 
Me.champ_mdp.SetFocus
Me.champ_utilisateur.SetFocus
 
pour activer les champs, mais ca ne marche toujours pas.

Reply

Marsh Posté le 25-04-2005 à 13:28:17    

le_bob75 a écrit :

toujours rien, je commence à desesperer, j'ai rajouter les 2 lignes de codes suivantes :
 
Me.champ_mdp.SetFocus
Me.champ_utilisateur.SetFocus
 
pour activer les champs, mais ca ne marche toujours pas.


 
Deux choses :

  • A la place des .Text, utilise plutôt les .value
  • Regarde mon message du 22. Utilise plutôt un recordset qu'un QueryDef


a+

Reply

Marsh Posté le 25-04-2005 à 14:13:36    

déja essayé, ca ne marche toujours pas. je vais bientot capituler...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed