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/2011, 00h29   #1
Futur Membre du Club
 
Homme
Architecte technique
Inscription : septembre 2011
Messages : 42
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Maroc

Informations professionnelles :
Activité : Architecte technique
Secteur : Bâtiment

Informations forums :
Inscription : septembre 2011
Messages : 42
Points : 18
Points : 18
Par défaut Changement du lien d'une table

Bonjour,

J'ai fait pas mal de recherches sur le sujet (changement du lien d'une table) en m'inspirant essentiellement de ces sujets :

http://access.developpez.com/faq/?pa...#RetablLienTbl

http://www.developpez.net/forums/d91...in-table-liee/

Je crois avoir trouvé finalement un petit départ pour un code qui devrait fonctionner. Mon problème, c'est qu'il ne marche pas pour une raison que je n'arrive pas à trouver :

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
Public Sub changerLienTable()
 
Dim db As DAO.Database
Dim Table As DAO.TableDef
Dim table1 As String
Dim baz As String
 
table1 = """" & Me.Modifiable23.value & """"  'c'est là que je cherche le nom de la table à laquelle je veux établir une liaison
Debug.Print table1
 
Set db = CurrentDb
baz = GetDbPathOfLinkedTable("CPS_ListeProjektBCM") 'cette fonction alimente le nom de la base où se trouve la table à laquelle la liaison actuelle existe.
'Je me base sur le nom d'une table "stable" ça marche sans problème.
Debug.Print baz
 
 
  Set Table = db.TableDefs("CPSTable_liee_BCM") 'ici c'est le nom de ma table ayant le lien à changer
 
     Debug.Print Table.Name
     Debug.Print SourceTableName
 
         Table.Connect = ";DATABASE=" & baz & ", " & table1
     Debug.Print Table.Connect
 
 
 
          Table.RefreshLink 'ici ça coince - c'est une erreur : nom de fichier incorrect erreur 3055
 
 
End Sub
Je ne sais pas si c'est une erreur de guillemets ou quelque chose de plus grave. Merci d'avance de bien vouloir m'orienter.

Bien cordialement,


NB : les debug.print donnent ce qui suit :

"VW1039"
C:\Users\OH\Desktop\1222.accdb
CPSTable_liee_BCM

;DATABASE=C:\Users\OH\Desktop\1222.accdb, "VW1039"


Ore
oreoolep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 09h32   #2
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
Bonjour

Je me demande si l'erreur ne vient pas de
Citation:
Table.Connect = ";DATABASE=" & baz & ", " & table1
Table.Connect doit contenir le chemin de la nouvelle base dans laquelle aller chercher la table, il faudrait donc supprimer la virgule et le nom de la table1.

Cela donnerait

Citation:
Table.Connect = ";DATABASE=" & baz
Pierre
pier.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 13h18   #3
Futur Membre du Club
 
Homme
Architecte technique
Inscription : septembre 2011
Messages : 42
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Maroc

Informations professionnelles :
Activité : Architecte technique
Secteur : Bâtiment

Informations forums :
Inscription : septembre 2011
Messages : 42
Points : 18
Points : 18
Par défaut Testé

Bonjour

Merci beaucoup pour ta réponse. C'est vrai, il n'y a plus d'erreur. Mais le problème, c'est que le nom de la table liée ne change pas. Or, il me faut changer ce nom, et je ne sais pas où.

Dans l'aide de Microsoft Access, je viens de voir un exemple avec la création d'une fonction ConnectOutput..

citation tirée de l'aide (version 2010) : "Cet exemple utilise les propriétés Connect et SourceTableName pour attacher plusieurs tables externes à une base de données Microsoft Access. La fonction ConnectOutput est nécessaire à l'exécution de cette procédure."


Ceci est dans l'article de l'aide sur "TableDef.SourceTableName, propriété" (Je ne le copie pas parce que je ne sais pas si les droits d'auteur le permettent).

Je vais continuer de creuser, mais je ne sais pas s'il est possible de gérer ceci en ajoutant quelque part une indication sur le nom de la nouvelle table liée.

Merci encore.

Ore
oreoolep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 13h54   #4
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
le nom de la table à lier se trouve dans cette ligne

Citation:
Set Table = db.TableDefs("CPSTable_liee_BCM") 'ici c'est le nom de ma table ayant le lien à changer
Je vous conseille de lire le tutoriel Liaisons dynamiques pour bases fractionnées, cela ne pourra que vous être utile !!

A bientôt.

Pierre
pier.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 16h05   #5
Futur Membre du Club
 
Homme
Architecte technique
Inscription : septembre 2011
Messages : 42
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Maroc

Informations professionnelles :
Activité : Architecte technique
Secteur : Bâtiment

Informations forums :
Inscription : septembre 2011
Messages : 42
Points : 18
Points : 18
Par défaut Merci pour le lien vers le tuto

Merci pour le lien vers le tuto. Je vais le lire avec intérêt.

En fait, je crois que je dois être plus précis : je n'ai pas besoin du nom de ma table à lier dans ma base 1 principale. Vous avez raison, le nom de la table est cité dans la ligne visée. J'ai besoin du nom dans la base 2 à lier ! (et ce n'est pas le même nom, il sera stocké dans une variable).

Pour résumer : j'ai une table dans ma base principale dont le nom ne varie pas, que je veux lier à une des tables (à chaque fois une différente mais ayant la même structure de données) d'une autre base.

A+

Ore
oreoolep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 22h50   #6
Futur Membre du Club
 
Homme
Architecte technique
Inscription : septembre 2011
Messages : 42
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Maroc

Informations professionnelles :
Activité : Architecte technique
Secteur : Bâtiment

Informations forums :
Inscription : septembre 2011
Messages : 42
Points : 18
Points : 18
Par défaut Changement de stratégie - résolu

OK. Je viens de changer de stratégie, et du coup, je crois avoir réglé le problème :

Je commence par supprimer la table liée dans ma base frontale, et je la recrée en la liant à la table que -je veux et que je choisis - dans la base dorsale.

Voilà le morceau de code modifié. J'aurais voulu ne pas avoir à supprimer ma table, mais je pense que c'est une solution acceptable.

Cordialement,

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
Public Sub changerLienTable()
 
Dim db As DAO.Database
Dim Table As DAO.TableDef
Dim tdf as Dao.TableDef
Dim table1 As String
Dim baz As String
 
table1 = Me.Modifiable23.value 'c'est là que je cherche le nom de la table à laquelle je veux établir une liaison
 
 
Set db = CurrentDb
baz = GetDbPathOfLinkedTable("CPS_ListeProjektBCM") 'cette fonction alimente le nom de la base où se trouve la table à laquelle la liaison actuelle existe
 
 
 
  Set Table = db.TableDefs("CPSTable_liee_BCM")
 
    DoCmd.RunSQL "DROP TABLE [" & Table.Name & "] ;"
 
 
Set tdf = New DAO.TableDef
With tdf
  .Name = "CPSTable_liee_BCM"
  .SourceTableName = table1
  .Connect = ";DATABASE=" & baz
End With
 
 db.TableDefs.Append tdf
db.TableDefs.Refresh
 
 
Set tdf = Nothing
Set db = Nothing
Set Table = Nothing    
 
 
End Sub
Merci de me donner vos avis pour une éventuelle amélioration.

A+
oreoolep est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web