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
Bonjour,

J'aimerais créer une requête SQL, où je recupère l'identifiant Windows de l'utilisateur en cours :

SELECT *
FROM Backoffice
WHERE [Identifiant Utilisateur]='user_name';

J'ignore quelle est la commande pour le récuperer.
Merci d'avance pour votre aide,
Cdlt
A voir également:

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
Bonjour,

Pour Windows 2000 et sup :
Dim Identifiant_Utilisateur As String

Identifiant_Utilisateur = Environ("USERNAME") 


;o)
0
Cela est le code en VBA, je ne pense pas que je puisse l'intégrer dans ma requête SQL
0
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
Je ne pense pas que l'on puisse le faire directement en SQL.

La requête devient :

SELECT * 
FROM Backoffice 
WHERE " & Identifiant_Utilisateur & " ='user_name'; 
0
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 ^^
0

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
Oups erreur dans mon post #3 ... ta syntaxe est bonne, il faut remplacer les "+" par "&" et c'est bon

;o)
0
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!
0
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
Je n'ai pas accès à Access en ce moment, je ne peux pas chercher. Il n'y aurait pas un ExecuteQuery() ?

0
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
0
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
Si ça fonctionne c'est le principal :o)

;o)
0
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
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)
0
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
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 :
  Resultat.MoveFirst 
  While Not resultat.Eof
     MsgBox resultat.Fields(0)
     resultat.MoveNext
  Wend


Voilà ... respire encore lentement ...

;o)
0
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
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)
0
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
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 :
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
0