Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/12/2010, 21h52   #1
Invité régulier
 
Inscription : mai 2008
Messages : 27
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 27
Points : 8
Points : 8
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
JPJOLY est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2010, 19h47   #2
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
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 : 3 939
Points : 6 278
Points : 6 278
Bonsoir,

Voila le code que j'utilise pour vérifier qu'une table liée est bien attachée à la dorsale souhaitée.
Code :
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 :
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+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/12/2010, 17h40   #3
Invité régulier
 
Inscription : mai 2008
Messages : 27
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 27
Points : 8
Points : 8
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 +
JPJOLY est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 20h01   #4
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
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 : 3 939
Points : 6 278
Points : 6 278
Bonsoir,

C'est plus clair maintenant

Voici un exemple plus proche de ta situation, toujours en utilisant la fonction VerifLien(..) :
Code :
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+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h12.


 
 
 
 
Partenaires

Hébergement Web