VBA/Access - Requête SQL

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
Configuration: Windows XP
Internet Explorer 6.0

11 réponses

  1. Bonjour,

    Pour Windows 2000 et sup :
    Dim Identifiant_Utilisateur As String
    
    Identifiant_Utilisateur = Environ("USERNAME") 


    ;o)
    1. Cela est le code en VBA, je ne pense pas que je puisse l'intégrer dans ma requête SQL
      1. 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'; 
        
        1. 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 ^^
          1. Oups erreur dans mon post #3 ... ta syntaxe est bonne, il faut remplacer les "+" par "&" et c'est bon

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

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

                    ;o)
                    1. 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)
                  2. 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)
                    1. 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)
                  3. 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