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 17/02/2011, 15h23   #1
Membre éclairé
 
Avatar de tototiti2008
 
Inscription : octobre 2008
Messages : 327
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 327
Points : 321
Points : 321
Par défaut Mise à jour liaisons tables liées

Bonjour à tous,

Je sais que ce thème a été traité plusieurs fois, mais je ne m'en sors pas...

Code :
1
2
3
4
    zz = CurrentDb.TableDefs("T_Client").Connect
        CurrentDb.TableDefs("T_Client").Connect = Replace(zz, "W:\à classer", "R:\essai\à classer")
    CurrentDb.TableDefs("T_Client").RefreshLink
    CurrentDb.TableDefs.Refresh
J'ai besoin de modifier les liens de la base sur le lecteur W vers une copie de la base qui se trouve sur le lecteur R

Ce code ne plante pas, mais rien ne se passe....

Avez-vous une piste ?

Merci de m'avoir lu
__________________
tototiti2008 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 15h52   #2
Membre régulier
 
Inscription : novembre 2010
Messages : 101
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2010
Messages : 101
Points : 81
Points : 81
Bonjour,

J'utilise cette méthode depuis de nombreuses années
testée avec AC2000-2003-2010 et qui fonctionne bien

une table T_INITIALISATION
avec les champs :
Path1 et Db1 pour les connections vers MaBase1
Path2 et Db2 pour les connections vers MaBase2
Etc ...

Dans Path j'écris \\IPServeur\Chemin\
Dans Db j'écris Matable.mdb

Ensuite j'exécute ce code pour connecter :

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
 
Global MaBase As Database
Global TbInit As Recordset
Global tb001, tb002, tb003 As TableDef
 
 
Public Function Fnc_ConnectDb1()
 
Set MaBase = CurrentDb
Set TbInit = MaBase.OpenRecordset("T_INITIALISATION")
DoCmd.Hourglass True
 
Set tb001 = MaBase.CreateTableDef("MaTable1")
Set tb002 = MaBase.CreateTableDef("MaTable2")
Set tb003 = MaBase.CreateTableDef("MaTable3")
'Etc ...
 
tb001.CONNECT = ";DATABASE=" & TbInit![path1] & TbInit![db1]
tb001.SourceTableName = "MaTable1"
MaBase.TableDefs.Append tb001
 
tb002.CONNECT = ";DATABASE=" & TbInit![path1] & TbInit![db1]
tb002.SourceTableName = "MaTable2"
MaBase.TableDefs.Append tb002 
'Etc
 
TbInit.Close
MaBase.Close
 
Set TbInit = Nothing
Set MaBase = Nothing
 
End function
Puis celui ci pour déconnecter

Code :
1
2
3
4
5
6
7
 
Public Function Fnc_DisConnectDb1()
 
DoCmd.DeleteObject acTable, "MaTable1"
DoCmd.DeleteObject acTable, "MaTable2"
'Etc ...
End Function
Il suffit de creer un formulaire sur la table initialisation afin d'indiquer les nouveaux chemins
puis un bouton pour déconnecter et un pour connecter
JeanYves70 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 15h57   #3
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Jean-Philippe ANDRÉ
Inscription : juillet 2007
Messages : 7 863
Détails du profil
Informations personnelles :
Nom : Jean-Philippe ANDRÉ
Âge : 28
Localisation : France

Informations forums :
Inscription : juillet 2007
Messages : 7 863
Points : 10 743
Points : 10 743
Envoyer un message via MSN à jpcheck
salut,

est-ce que le code fourni dans ce sujet peut t'aider ?
http://www.developpez.net/forums/d43...on-table-liee/
__________________
Pas de question technique par MP, je ne réponds pas

Mon perso ? Une vraie brute

Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 16h41   #4
Membre éclairé
 
Avatar de tototiti2008
 
Inscription : octobre 2008
Messages : 327
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 327
Points : 321
Points : 321
Bonjour JeanYves, Bonjour jpcheck,

ça a l'air de fonctionner comme ça, grâce à vous

Code :
1
2
3
4
5
6
7
8
9
10
11
Dim Conn As String, ConnNouv As String, NomTable As String, MT As TableDef
    Conn = CurrentDb.TableDefs("T_Client").Connect
    NomTable = CurrentDb.TableDefs("T_Client").SourceTableName
    ConnNouv = Replace(Conn, "W:\à classer", "R:\essai\à classer")
    DoCmd.DeleteObject acTable, "T_Client"
    DoEvents
    CurrentDb.TableDefs.Refresh
    Set MT = CurrentDb.CreateTableDef("T_Client")
    MT.Connect = ConnNouv
    MT.SourceTableName = NomTable
    CurrentDb.TableDefs.Append MT
Merci beaucoup
__________________
tototiti2008 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 16h50   #5
Invité régulier
 
Térence
Inscription : décembre 2010
Messages : 10
Détails du profil
Informations personnelles :
Nom : Térence

Informations forums :
Inscription : décembre 2010
Messages : 10
Points : 8
Points : 8
Bonjour à tous,

Je ne sais pas si ça intéresse toujours quelqu'un mais vu que j'ai été confronté au même problème (mais en masse), voici une piste :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub testTableLiée()
 
Dim Adresse As String
 
Debug.Print CurrentDb.TableDefs("Table1").Connect
 
Adresse = ";DATABASE=C:\Répertoire2\Base.accdb"
 
CurrentDb.TableDefs("Table1").Connect = Adresse
CurrentDb.TableDefs("Table1").RefreshLink
CurrentDb.TableDefs.Refresh
 
Debug.Print CurrentDb.TableDefs("Table1").Connect
 
End Sub
Renvoie

Code :
1
2
;DATABASE=C:\Répertoire1\Base.accdb
;DATABASE=C:\Répertoire1\Base.accdb
Alors que

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Sub testTableLiée()
 
Dim Adresse As String
Dim tblDef As TableDef
 
Debug.Print CurrentDb.TableDefs("Table1").Connect
 
Adresse = ";DATABASE=C:\Répertoire2\Base.accdb"
 
For Each tblDef In CurrentDb.TableDefs
    If tblDef.Name = "Table1" Then
        tblDef.Connect = Adresse
        tblDef.RefreshLink
    End If
Next
 
CurrentDb.TableDefs.Refresh
 
Debug.Print CurrentDb.TableDefs("Table1").Connect
 
End Sub
Renvoie bien

Code :
1
2
;DATABASE=C:\Répertoire1\Base.accdb
;DATABASE=C:\Répertoire2\Base.accdb
J'ai testé avec un

Code :
1
2
3
4
5
6
Dim Adresse As String
Dim tblDef As TableDef
 
Set tblDef = Currentdb.TableDefs("Table1")
 
Debug.Print tblDef.Connect
Mais j'obtiens une erreur 3420, l'objet est incorrect ou n'est plus défini.

Puis l'idée suivante, qui marche, sans que je comprenne bien pourquoi :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub testTablesLiées()
 
Dim Adresse As String
Dim tblDef As TableDefs
 
Set tblDef = CurrentDb.TableDefs
 
Debug.Print tblDef("Table1").Connect
 
Adresse = ";DATABASE=C:\Répertoire2\Base.accdb"
 
tblDef("Table1").Connect = Adresse
tblDef("Table1").RefreshLink
CurrentDb.TableDefs.Refresh
 
Debug.Print tblDef("Table1").Connect
 
End Sub
Qui renvoie bien

Code :
1
2
;DATABASE=C:\Répertoire1\Base.accdb
;DATABASE=C:\Répertoire2\Base.accdb
Cordialement,
Térence.
Tete1805 est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h18.


 
 
 
 
Partenaires

Hébergement Web