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 :

Comment connecter et deconnecter dynamiquement des tables


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 58
    Points : 57
    Points
    57
    Par défaut Comment connecter et deconnecter dynamiquement des tables
    Bonjour,

    J'ai une grosse application ACCES 2007 (macros +vba) en multi-utilisateurs en mode frontal/dorsal. Les programmes sont sur chaque PC (frontal) et les tables sont uniques accessibles par tous sur le serveur (dorsal).
    Cela fonctionne, mais je voudrais pouvoir avoir certaines tables accedées uniquement par un user A et d'autres uniquement par le user B.
    Les tables de A et de B ayant le même nom mais pas le même support pour ne pas modifier le code commun à tous.
    Autrement dit je voudrais faire de la connexion dymamique de tables à la reconnaissance du user.
    Exemple: Quand A se connecte à l'application je veux lui associer les tables
    ACHAT et DOSSIER qui sont sur le lecteur V \\V:ACHAT.accbd VOSSIER.accbd
    et quand B se connecte lui associer les tables de même nom qui sont sur W \\W:ACHAT.accbd WOSSIER.accbd

    Merci de tout conseils, références, codes, articles, etc.. sur le sujet

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    Voila le code que j'utilise pour vérifier qu'une table liée est bien attachée à la dorsale souhaitée.
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    ' -------------------------------------------------------------------
    Function VerifLien(strTable As String, strDBSce As String)
    Dim db As DAO.Database, td As DAO.TableDef
    Dim strConnect As String, strConnectNew As String
    Dim strLinkedDB As String
     
    On Error GoTo ErrH
    Set db = CurrentDb
    Set td = db.TableDefs(strTable)
    If Not td Is Nothing Then
       If (td.Attributes And dbAttachedTable) <> 0 Then
          ' Extraire Base Dorsale de la chaîne de connexion
          strConnect = td.Connect
          strLinkedDB = GetLinkedDB(strConnect)
          ' Si le chemin complet de la base dorsale est différent
          ' de celui attendu, recréer le lien.
          If StrComp(strLinkedDB, strDBSce, vbTextCompare) <> 0 Then
             ' Créer nouvelle chaîne de connexion
             strConnectNew = Replace(strConnect, strLinkedDB, strDBSce)
             td.Connect = strConnectNew
             ' Recréer le lien
             td.RefreshLink
          End If
       End If
    End If
     
    Sortie:
    Exit Function
     
    ErrH:
    Select Case Err.Number
        Case 3265 ' Elt non trouvé dans la collection
             MsgBox "La table '" & strTable & "' n'exite pas.'"
             Resume Sortie
    End Select
    MsgBox "Erreur No." & Err.Number & " : " & Err.Description
    Resume Sortie
     
    End Function
     
    ' -------------------------------------------------------------------
    Function GetLinkedDB(strConnect As String) As String
    Dim p As Long, strDBFullPathName As String
     
    p = InStr(1, strConnect, "DATABASE=")
    If p > 0 Then
       strDBFullPathName = Mid(strConnect, p + Len("DATABASE="))
    End If
    p = InStr(1, strDBFullPathName, ";")
    If p > 1 Then
       strDBFullPathName = Left(strDBFullPathName, p - 1)
    End If
     
    GetLinkedDB = strDBFullPathName
    End Function
    On peut l'utiliser de cette façon, par exemple :
    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
    Function LienAuto()
    Dim strUser As String
    Dim strTable As String, strDBSce As String
     
    strUser = "A"
     
    ' 1ere table
    strTable = "ACHAT"    ' Nom table liée
    ' Choix Base de données
    Select Case strUser
        Case "A"
           strDBSce = "V:\ACHAT.accbd"
        Case "B"
           strDBSce = "W:\ACHAT.accbd"
    End Select
    If Len(strDBSce) > 0 Then VerifLien strTable, strDBSce
     
     
    ' 2eme table
    strTable = "DOSSIER"    ' Nom table liée
    ' Choix Base de données
    Select Case strUser
        Case "A"
           strDBSce = "V:\DOSSIER.accbd"
        Case "B"
           strDBSce = "W:\DOSSIER.accbd"
    End Select
    If Len(strDBSce) > 0 Then VerifLien strTable, strDBSce
     
    End Function
    Mon exemple est peut-être à côté de la plaque, car je n'ai compris si ACHAT et DOSSIER étaient des tables ou des bases de données.

    A+

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 58
    Points : 57
    Points
    57
    Par défaut Cela m'aide beaucoup
    Tout d'abord MERCI, car le code envoyé fait évoluer beaucoup ma réflexion.
    Effectivement mon message était mal conçu.
    En fait je souhaite connecter l'utilisateur A vers une base A ou il trouvera les tables ACHATS et DOSSIER ou l'utilisateur B vers une base B ou il trouvera les tables ACHATS et DOSSIER.
    A partir de vos informations je vais essayer de m'en sortir.
    Mais sans doute....a +

  4. #4
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    C'est plus clair maintenant

    Voici un exemple plus proche de ta situation, toujours en utilisant la fonction VerifLien(..) :
    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
    Function LienAuto()
    Dim strUser As String
    Dim strDBSce As String
     
    strUser = "A"  ' codé en dur pour tester
     
    ' Choix Base de données contenant les tables à lier
    Select Case strUser
        Case "A"
           strDBSce = "V:\Base A.accbd"
        Case "B"
           strDBSce = "W:\Base B.accbd"
    End Select
     
    ' Vérification des liens
    If Len(strDBSce) > 0 Then
       VerifLien "ACHATS", strDBSce
       VerifLien "DOSSIER", strDBSce
    End If
    End Function
    A+

Discussions similaires

  1. Créer dynamiquement des tables en Oracle.
    Par adrien954 dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 19/04/2011, 08h59
  2. [ALIAS TABLE] - Comment définir un alias sur des tables
    Par spezet29 dans le forum Administration
    Réponses: 7
    Dernier message: 10/08/2010, 14h16
  3. Comment faire un DROP sur des tables qui change de nom ?
    Par GeantBioHazard dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 04/07/2008, 15h03
  4. Comment faire un lien "dynamique" de tables??
    Par fram069 dans le forum Access
    Réponses: 1
    Dernier message: 10/04/2006, 13h43
  5. [DTS]générer dynamiquement des tables Postgres 8.0
    Par CetTer dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 08/10/2005, 10h35

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