Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1806 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  interoger BD/ VBA/ DAO

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

interoger BD/ VBA/ DAO

n°1055381
le_bob75
Posté le 21-04-2005 à 16:43:56  profilanswer
 

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
 
 
 

mood
Publicité
Posté le 21-04-2005 à 16:43:56  profilanswer
 

n°1055415
gfa
Posté le 21-04-2005 à 17:03:30  profilanswer
 

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

n°1055425
le_bob75
Posté le 21-04-2005 à 17:11:23  profilanswer
 

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

n°1055536
le_bob75
Posté le 21-04-2005 à 18:09:36  profilanswer
 

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

n°1055630
Athena159
Posté le 21-04-2005 à 19:40:04  profilanswer
 

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

n°1056081
gfa
Posté le 22-04-2005 à 08:41:55  profilanswer
 

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

n°1056106
le_bob75
Posté le 22-04-2005 à 09:48:58  profilanswer
 

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 ?

n°1056118
gfa
Posté le 22-04-2005 à 10:05:48  profilanswer
 

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...

n°1056551
le_bob75
Posté le 22-04-2005 à 14:21:35  profilanswer
 

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

n°1056660
le_bob75
Posté le 22-04-2005 à 15:01:02  profilanswer
 

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

mood
Publicité
Posté le 22-04-2005 à 15:01:02  profilanswer
 

n°1056735
gfa
Posté le 22-04-2005 à 15:32:13  profilanswer
 

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.

n°1056766
le_bob75
Posté le 22-04-2005 à 15:43:58  profilanswer
 

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

n°1056880
gfa
Posté le 22-04-2005 à 16:20:15  profilanswer
 

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
 

n°1059394
le_bob75
Posté le 25-04-2005 à 09:44:26  profilanswer
 

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.

n°1059397
gfa
Posté le 25-04-2005 à 09:47:37  profilanswer
 

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+

n°1059434
le_bob75
Posté le 25-04-2005 à 10:19:57  profilanswer
 

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

n°1059514
le_bob75
Posté le 25-04-2005 à 11:05:49  profilanswer
 

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.

n°1059666
gfa
Posté le 25-04-2005 à 13:28:17  profilanswer
 

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+

n°1059719
le_bob75
Posté le 25-04-2005 à 14:13:36  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  interoger BD/ VBA/ DAO

 

Sujets relatifs
VBA & Combobox - besoin d'aide -[VBA] Question simple sur InStr et adresse e-mail...
Contrôler bouton de la barre d'outil Word en VBAActualisation des valeurs ds excel pour macro VBA
VBA EXCEL HELPVBA / Excel et les séparateurs de décimales
Action rechercher en VBALDAP et VBA
Création dynamique de combobox en VBAVBA Outlook : Création mail et insertion signature
Plus de sujets relatifs à : interoger BD/ VBA/ DAO


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR