IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Obtenir les noms utilisateurs connectés à la BD


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    n.d.
    Inscrit en
    Juin 2018
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : n.d.

    Informations forums :
    Inscription : Juin 2018
    Messages : 50
    Points : 31
    Points
    31
    Par défaut Obtenir les noms utilisateurs connectés à la BD
    Bonjour,

    j'aimerais simplement connaitre le nom d'utilisateur de leur connexion windows pour connaître qui est connecté à une BD sur un serveur X.

    Bref, voici le petit code que j'ai présentement qui est incomplet...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
     
    Public Function Users() As String
     
    On Error GoTo ErrorHandler
     
        Dim strDBPath As String
     
        strDBPath = "Répertoire...\LaBD.accdb"
     
        Dim cn As New ADODB.Connection
        Dim Rs As New ADODB.Recordset
     
        cn.Provider = "Microsoft.ACE.OLEDB.12.0"
        cn.Open "Data Source=" & strDBPath
     
        Set Rs = cn.OpenSchema(adSchemaProviderSpecific, , ""{947bb102-5d43-11d1-bdbf-00c04fb92675}"")
     
        UsersPA = "Ordinateur" & ";" & "Utilisateur" & ";"
     
        Do Until Rs.EOF
            UsersPA = Users & Rs.Fields(0) & ";" & Rs.Fields(1) & ";"
            Rs.MoveNext
        Loop
     
        Users = Replace(Users, Chr(0), "")
        Users = Replace(Users, " ", "")
     
    ErrorHandler:
     
        On Error Resume Next
        Set Rs = Nothing
        Set cn = Nothing
     
     
    End Function
    Le nom de PC fonctionne bien.... par contre l'utilisateur me renvoie plutot qui se log dans la BD et non windows... Bref, j'obtiens toujours "Admin". J'aimerais changer se bout pour la "login" de windows.

    Est-ce qu'il y a des librairies à appeler, quel est le code à terminer?

    Merci d'avance!

  2. #2
    Membre émérite Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 670
    Points : 2 489
    Points
    2 489
    Par défaut
    J'ai souvent utilisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Utilisateur = Environ("username")
    'ou bien Utilisateur = CurrentUser()
    Domaine = Environ("domain")
    Debug.Print, Utilisateur, Domaine
    Pour des infos plus explicites, j'ai créé une table de correspondance entre 'Environ("username")' et le nom complet de l'utilisateur, car 'Environ("username")' pourrait renvoyer quelque choie comme "JPL" qui se réfère à "Jean-Paul Lagrange".

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 113
    Points : 124
    Points
    124
    Par défaut
    Hello,

    Voici une petite fonction que j'utilise sur l'une de mes bases de données pour obtenir la liste des utilisateurs actuellement connectés à la dorsale de ma BDD (j'affiche le résultat dans une list box)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    Private Type Un_Connecte
     ' --nom PC
    PC(1 To 32) As Byte
    End Type
     
    Public Function Pc_Connect(strBdd As String)
     
    On Error GoTo Err_Pc_Connect
     
    Dim intLDB As Integer, i As Integer, strChemin As String, Nom_PC As String, utilisateur As Un_Connecte, _
    db As Database, strTemp As String, strSQL As String
     
    DoCmd.SetWarnings False
    DoCmd.RunSQL "DELETE * FROM T_User;"
    strChemin = Left(strBdd, InStr(1, strBdd, ".")) + "LACCDB"
    intLDB = FreeFile
    Open strChemin For Binary Access Read Shared As intLDB
    Do While Not EOF(intLDB)
    Get intLDB, , utilisateur
    With utilisateur
    i = 1
    Nom_PC = ""
    While .PC(i) <> 0
    Nom_PC = Nom_PC & Chr(.PC(i))
    i = i + 1
    Wend
    End With
    If Len(Nom_PC) > 0 Then
    DoCmd.SetWarnings False
    DoCmd.RunSQL ("INSERT INTO T_User (COMPUTER_USER) VALUES('" & Nom_PC & "');")
    DoCmd.SetWarnings True
    End If
    Loop
     
    Close intLDB
     
    Exit Function
     
    Err_Pc_Connect:
    MsgBox err.Number & vbCrLf & err.DESCRIPTION, vbInformation, "Erreur"
    Close intLDB
     
    End Function
    Pour appeler la fonction : Pc_Connect("chemin complet de la base de donnée")

    Bref, la fonction ouvre le fichier .laccdb qui se situe au même endroit que la BDD, analyse son contenu puis enregistre ce contenu dans une table appelée T_User. Ma list box est alimentée par une requête basée sur la table T_User.

    Si tu ouvres manuellement le fichier .laccdb avec un éditeur de texte par exemple, tu verras que ce dernier contient la liste des utilisateurs qui sont en train d'utiliser ta BDD.

    Cdt

  4. #4
    Membre émérite Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 670
    Points : 2 489
    Points
    2 489
    Par défaut
    @elgordopresto: solution élaborée et bien pensée! mais le résultat est obtenu plus rapidement avec Environ("Username") ou CurrentUser() + Environ("domain")

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    n.d.
    Inscrit en
    Juin 2018
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : n.d.

    Informations forums :
    Inscription : Juin 2018
    Messages : 50
    Points : 31
    Points
    31
    Par défaut
    Effectivement, j'ai simplement remplacé le rs.fields... par environ("Username") et ça fonctionne à merveille !!

    Merci

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    n.d.
    Inscrit en
    Juin 2018
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : n.d.

    Informations forums :
    Inscription : Juin 2018
    Messages : 50
    Points : 31
    Points
    31
    Par défaut
    Par contre pour le domaine, ça semble plus être la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Domaine = environ("Userdomain")
    qui fonctionne pour moi.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    n.d.
    Inscrit en
    Juin 2018
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : n.d.

    Informations forums :
    Inscription : Juin 2018
    Messages : 50
    Points : 31
    Points
    31
    Par défaut
    Est-ce qu'il y aurait un moyen d'envoyer un message system à ces utilisateurs?

    Exemple : Pour avertir d'une nouvelle mise à jour disponible ou encore que la BD va passer en mode maintenance...

  8. #8
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    Bonjour,

    La commande Windows "Net Send" permet d'envoyer des messages à des utilisateurs d'un réseau.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    n.d.
    Inscrit en
    Juin 2018
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : n.d.

    Informations forums :
    Inscription : Juin 2018
    Messages : 50
    Points : 31
    Points
    31
    Par défaut
    j'utilise le numéro de PC comme destinataire sur le réseau...

    Mais rien ne se passe, est-ce que c'est censé être un pop-up CMD?

  10. #10
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    il semble que mes connaissances datent un peu.

    à partir de Vista il y a la commande "msg" qui semble plus puissante que le vieux net send.

    https://docs.microsoft.com/en-us/pre...ectedfrom=MSDN

    Etant en monoposte actuellement (vive les vacances !!) je n'ai pu faire le test qu'avec moi même. ça fonctionne.
    msg fabrice bonsoir moi.

    m'a afficher un joli msgbox.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    n.d.
    Inscrit en
    Juin 2018
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : n.d.

    Informations forums :
    Inscription : Juin 2018
    Messages : 50
    Points : 31
    Points
    31
    Par défaut
    Effectivement,

    Merci Loufab, c'est également ce que j'avais trouvé, la commande "msg".

    Ça fonctionne également.

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    n.d.
    Inscrit en
    Juin 2018
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : n.d.

    Informations forums :
    Inscription : Juin 2018
    Messages : 50
    Points : 31
    Points
    31
    Par défaut
    Finalement, après quelques tests...

    la fonction environ("username") ne fait pas exactement ce que je cherche... J'obtiens seulement ma connexion et pas les autres personnes connecté à la BD, si je le fais avec la commande rs.fields(0) & " " rs.fields(1)... par contre la j'obtiens le numéro de PC de chacun.

    Je sais où je dois ajuster mon code, je ne comprend pas juste comment y procéder...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
     
    Public Function Users()
     
    On Error GoTo ErrorHandler
     
        Dim strDBPath As String
        Dim Utilisateurs As String
     
        strDBPath = "Chemin d'accès\LaBD.accdb"
     
        Dim cn As New ADODB.Connection
        Dim Rs As New ADODB.Recordset
     
        cn.Provider = "Microsoft.ACE.OLEDB.12.0"
        cn.Open "Data Source=" & strDBPath
     
        Set Rs = cn.OpenSchema(adSchemaProviderSpecific, , "{947bb102-5d43-11d1-bdbf-00c04fb92675}")
     
        Utilisateurs = ""
     
        Do Until Rs.EOF
            Utilisateurs = Utilisateurs & Environ("Username") & " (" & Environ("Userdomain") & ") " 'J'imagine que je dois modifier ici...
            Rs.MoveNext
        Loop
     
        Utilisateurs = Replace(Utilisateurs, Chr(0), "")
        Utilisateurs = Replace(Utilisateurs, " ", "")
        Utilisateurs = Replace(Utilisateurs, "(", " (")
     
    ErrorHandler:
     
        On Error Resume Next
        Set Rs = Nothing
        Set cn = Nothing
     
    [Forms]![Formulaire_utilisateurs].ListeUsers.RowSource = Utilisateurs
     
    End Function
    Ce que je discerne c'est que la commande du environ() n'a pas de lien avec le Rs.EOF, donc il effectue la même chose et ne détecte pas de différence. Bref, pouvez vous m'aidez à comprendre comment, si possible, procéder.

    Sinon j'avais pensez via mon autre formulaire d'utilisateurs de faire une alimentation de la table lors du chargement et une supression lors de la fermeture. Une table que l'utilisateur alimenterait lui même avec la commande environ("username").



    Merci de m'aider à comprendre!

  13. #13
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    Bonjour,

    Citation Envoyé par elgordopresto Voir le message
    Si tu ouvres manuellement le fichier .laccdb avec un éditeur de texte par exemple, tu verras que ce dernier contient la liste des utilisateurs qui sont en train d'utiliser ta BDD.
    C'est un peu faux...
    https://arkham46.developpez.com/arti...lisateurs-ldb/

    Sinon voir si cet outil peut convenir :
    https://argyronet.developpez.com/dow.../mdbviewer/v4/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/04/2014, 12h00
  2. Réponses: 8
    Dernier message: 15/03/2011, 12h24
  3. [Débutant] [interop Word] obtenir les noms des champs Fields
    Par TSalm dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 30/08/2007, 22h03
  4. Obtenir les noms ou ip d'ordinateur sur un même réseau ?
    Par evangeliste dans le forum Réseau
    Réponses: 4
    Dernier message: 31/10/2006, 09h23
  5. [VBA]Obtenir les noms des polices disponibles
    Par xp dans le forum VBA Access
    Réponses: 2
    Dernier message: 04/03/2004, 15h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo