VBA/Access - Requête SQL
Fermé
RailBird
-
2 sept. 2008 à 09:29
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 - 15 sept. 2008 à 09:16
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 - 15 sept. 2008 à 09:16
A voir également:
- VBA/Access - Requête SQL
- Récupération serveur sql - Télécharger - Gestion de données
- Requête sql pix - Forum Python
- Find vba - Astuces et Solutions
- Vba ouvrir un fichier excel avec chemin ✓ - Forum VB / VBA
- Vba attendre 1 seconde ✓ - Forum VB / VBA
11 réponses
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
2 sept. 2008 à 09:42
2 sept. 2008 à 09:42
Bonjour,
Pour Windows 2000 et sup :
;o)
Pour Windows 2000 et sup :
Dim Identifiant_Utilisateur As String Identifiant_Utilisateur = Environ("USERNAME")
;o)
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
2 sept. 2008 à 09:49
2 sept. 2008 à 09:49
Je ne pense pas que l'on puisse le faire directement en SQL.
La requête devient :
La requête devient :
SELECT * FROM Backoffice WHERE " & Identifiant_Utilisateur & " ='user_name';
J'ai pensé à faire ça :
initADO
Dim sql
Dim user_name
user_name = Environ("Username")
sql = "SELECT * FROM Backoffice WHERE [Identifiant Utilisateur]='" + user_name + "';"
MsgBox sql
Set db = CurrentProject.Connection
rst.Open sql, db
j'essaye d'ouvrir un page avec un DoCmd.OpenQuery afin qu'il m'affiche ce que je cherche avec ma requête SQL ^^
initADO
Dim sql
Dim user_name
user_name = Environ("Username")
sql = "SELECT * FROM Backoffice WHERE [Identifiant Utilisateur]='" + user_name + "';"
MsgBox sql
Set db = CurrentProject.Connection
rst.Open sql, db
j'essaye d'ouvrir un page avec un DoCmd.OpenQuery afin qu'il m'affiche ce que je cherche avec ma requête SQL ^^
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
2 sept. 2008 à 09:54
2 sept. 2008 à 09:54
Oups erreur dans mon post #3 ... ta syntaxe est bonne, il faut remplacer les "+" par "&" et c'est bon
;o)
;o)
Je cherche la commande pour afficher comme DoCmd.OpenQuery qui ne fonctionne pas, j'ai regardé pour DoCmd.RunSQL, mais il fonctionne qu'avec des requêtes d'action et non pas avec des Select!
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
2 sept. 2008 à 10:13
2 sept. 2008 à 10:13
Je n'ai pas accès à Access en ce moment, je ne peux pas chercher. Il n'y aurait pas un ExecuteQuery() ?
Ca marche avec un Query.
Le seul problème est que je suis obligé de le créer pour que le code fonctionne ^^
initADO
Dim sql
Dim user_name
Dim stDocName
Dim Qry As DAO.QueryDef
user_name = Environ("Username")
sql = "SELECT * FROM Backoffice WHERE [Identifiant Utilisateur]='" + user_name + "';"
'MsgBox sql
Set db = CurrentProject.Connection
DoCmd.DeleteObject acQuery, "Find_UserAdd"
CurrentDb.CreateQueryDef "Find_UserAdd", sql
Set Qry = CurrentDb.QueryDefs("Find_UserAdd")
stDocName = "Find_UserAdd"
DoCmd.OpenQuery stDocName, acNormal, acEdit
Le seul problème est que je suis obligé de le créer pour que le code fonctionne ^^
initADO
Dim sql
Dim user_name
Dim stDocName
Dim Qry As DAO.QueryDef
user_name = Environ("Username")
sql = "SELECT * FROM Backoffice WHERE [Identifiant Utilisateur]='" + user_name + "';"
'MsgBox sql
Set db = CurrentProject.Connection
DoCmd.DeleteObject acQuery, "Find_UserAdd"
CurrentDb.CreateQueryDef "Find_UserAdd", sql
Set Qry = CurrentDb.QueryDefs("Find_UserAdd")
stDocName = "Find_UserAdd"
DoCmd.OpenQuery stDocName, acNormal, acEdit
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
2 sept. 2008 à 10:26
2 sept. 2008 à 10:26
Si ça fonctionne c'est le principal :o)
;o)
;o)
MarieDelphine
Messages postés
4
Date d'inscription
vendredi 12 septembre 2008
Statut
Membre
Dernière intervention
11 janvier 2010
12 sept. 2008 à 14:28
12 sept. 2008 à 14:28
Bonjoru à tous!
J'ai un problème qui y ressemble et je ne trouve pas la réponse, j'ai un code come ça:
Private Sub cmdRechercher_Click()
Dim Nom As String
Dim Prenom As String
Nom = Me.txtNom.Value
Prenom = Me.txtPrenom.Value
strsql = "select ID from Personnes where Nom = '" & Nom & "' and Prenom = '" & Prenom & "'"
Dim resultat As Recordset
Set db = CurrentDb()
Set resultat = db.OpenRecordset(strsql)
MsgBox resultat
End Sub
Seulement si je lui demande d'afficher "resultat" j'ai une erreur (incompatibilité de type) mais je ne vois pas ce que ça veut dire???
et si je lui demande de compter les enregistrements en limitant ma requête à "select ID from Personnes", il me répond 1 alors que j'ai 7 enregistrements...
Enfin bref c'est la cata et je n'y comprends rien...
Please heeeeeeeeeeeelp
Merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii :o)
J'ai un problème qui y ressemble et je ne trouve pas la réponse, j'ai un code come ça:
Private Sub cmdRechercher_Click()
Dim Nom As String
Dim Prenom As String
Nom = Me.txtNom.Value
Prenom = Me.txtPrenom.Value
strsql = "select ID from Personnes where Nom = '" & Nom & "' and Prenom = '" & Prenom & "'"
Dim resultat As Recordset
Set db = CurrentDb()
Set resultat = db.OpenRecordset(strsql)
MsgBox resultat
End Sub
Seulement si je lui demande d'afficher "resultat" j'ai une erreur (incompatibilité de type) mais je ne vois pas ce que ça veut dire???
et si je lui demande de compter les enregistrements en limitant ma requête à "select ID from Personnes", il me répond 1 alors que j'ai 7 enregistrements...
Enfin bref c'est la cata et je n'y comprends rien...
Please heeeeeeeeeeeelp
Merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii :o)
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
12 sept. 2008 à 14:45
12 sept. 2008 à 14:45
Bonjour,
Respire calmement ... zen ... pas de panique. :o)
Voilà, une fois calmée, on va examiner de plus près ton problème ... :O))
Premièrement je ne vois pas ta déclaration de ta variable strsql dans ta procédure. Ce n'est qu'un détail, parce que je suppose que tu n'as pas mis Option Explicit en en t^te de ton module. Mais c'est bien de le faire quand même pour être logique avec la déclaration de tes autres variables.
Tu inspires encore lentement et tu expires bien fort aussi ... voilà ...
Resultat est un objet de type recordset. Ce qui veut dire que ton objet contient plusieurs enregistrements. MsgBox ne peut pas prendre en compte un objet tel quel.
Ensuite, quelle méthode as-tu utilisé pour compter les enregistrements de ton simple "Select ID from Personnes" ?
Pour lire un recordset, il faut le parcourir. La première chose à faire est de s'assurer que l'on est bien sur la première ligne d'enregistrement en faisant un MoveFirst (Resultat.MoveFirst), ensuite faire :
Voilà ... respire encore lentement ...
;o)
Respire calmement ... zen ... pas de panique. :o)
Voilà, une fois calmée, on va examiner de plus près ton problème ... :O))
Premièrement je ne vois pas ta déclaration de ta variable strsql dans ta procédure. Ce n'est qu'un détail, parce que je suppose que tu n'as pas mis Option Explicit en en t^te de ton module. Mais c'est bien de le faire quand même pour être logique avec la déclaration de tes autres variables.
Tu inspires encore lentement et tu expires bien fort aussi ... voilà ...
Resultat est un objet de type recordset. Ce qui veut dire que ton objet contient plusieurs enregistrements. MsgBox ne peut pas prendre en compte un objet tel quel.
Ensuite, quelle méthode as-tu utilisé pour compter les enregistrements de ton simple "Select ID from Personnes" ?
Pour lire un recordset, il faut le parcourir. La première chose à faire est de s'assurer que l'on est bien sur la première ligne d'enregistrement en faisant un MoveFirst (Resultat.MoveFirst), ensuite faire :
Resultat.MoveFirst While Not resultat.Eof MsgBox resultat.Fields(0) resultat.MoveNext Wend
Voilà ... respire encore lentement ...
;o)
MarieDelphine
Messages postés
4
Date d'inscription
vendredi 12 septembre 2008
Statut
Membre
Dernière intervention
11 janvier 2010
12 sept. 2008 à 21:16
12 sept. 2008 à 21:16
Et ce qui est encore mieux c'est que ça marche ;o)
Merci pour ta réponse et encore sorry de poser des questions de base mais il faut bien commencer quelquepart ;o)
Je m'étais bien doutée que le recordset était la réponse complète à la requête, comme un reader en asp mais je n'étais pas sure...
Bref rentrée chez moi j'ai recréé ma DB et j'en suis là:
Afficher dans un msgbox ne sert à rien donc je voudrais construire une zone de liste avec les différentes lignes de résultat à la requête, mais je n'ai aucune idée comment faire... surtout avec 2 colonnes?
Est-ce toujours dans tes cordes?
Promis, je respire entre chaque phrase ;o)
Merci pour ta réponse et encore sorry de poser des questions de base mais il faut bien commencer quelquepart ;o)
Je m'étais bien doutée que le recordset était la réponse complète à la requête, comme un reader en asp mais je n'étais pas sure...
Bref rentrée chez moi j'ai recréé ma DB et j'en suis là:
Afficher dans un msgbox ne sert à rien donc je voudrais construire une zone de liste avec les différentes lignes de résultat à la requête, mais je n'ai aucune idée comment faire... surtout avec 2 colonnes?
Est-ce toujours dans tes cordes?
Promis, je respire entre chaque phrase ;o)
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
15 sept. 2008 à 09:16
15 sept. 2008 à 09:16
Bonjour,
Ca va mieux ce matin ? tu as pu déstresser pendant le week end ?
Dans ta requête : "select ID from Personnes where Nom = '" & Nom & "' and Prenom = '" & Prenom & "'" , il semblerait que tu veux l'ID (l'identifiant) concernant une seule personne (nom + prénom). Tu peux donc affecter le résultat de ton recordset dans zone texte, ton recordset ne contiendra qu'un seul élément, en faisant comme ça :
Ca va ? sinon, tu connais la technique : inspirez ... expirez ... ;o)
En admettant, que tu connaisses l'identifiant (ID) et que tu veuilles afficher le nom et le prénom dans un textbox. L'affichage du resultat de la requête (Select nom, prenom From Personnes where id =" & id) :
Pour afficher une liste de résultat venant d'un recordset avec une requête (Select no, prenom From Personnes Where ville = 'Paris'), il faut utiliser une listbox:
Voili voilou ...
Bon courage.
N'hésites pas à revenir si tu as un blème.
;o)
Polux
Ca va mieux ce matin ? tu as pu déstresser pendant le week end ?
Dans ta requête : "select ID from Personnes where Nom = '" & Nom & "' and Prenom = '" & Prenom & "'" , il semblerait que tu veux l'ID (l'identifiant) concernant une seule personne (nom + prénom). Tu peux donc affecter le résultat de ton recordset dans zone texte, ton recordset ne contiendra qu'un seul élément, en faisant comme ça :
Text1.Text = Resultat.Fields(0)
Ca va ? sinon, tu connais la technique : inspirez ... expirez ... ;o)
En admettant, que tu connaisses l'identifiant (ID) et que tu veuilles afficher le nom et le prénom dans un textbox. L'affichage du resultat de la requête (Select nom, prenom From Personnes where id =" & id) :
Text1.Text = resultat.Fields(0) & " " & resultat.Fields(1)
Pour afficher une liste de résultat venant d'un recordset avec une requête (Select no, prenom From Personnes Where ville = 'Paris'), il faut utiliser une listbox:
Resultat.MoveFirst While Not resultat.Eof list1.Additem resultat.Fields(0) & vbTab & resultat.Fields(1) resultat.MoveNext Wend
Voili voilou ...
Bon courage.
N'hésites pas à revenir si tu as un blème.
;o)
Polux