Comment rafraîchir les tables liées dans un mdb D'accès quand ODBC change
je peux créer un accès mdb et ajouter une table liée à une base de données Sql Server via ODBC. Si je change le serveur Sql auquel L'ODBC se connecte avec L'applet du panneau de contrôle ODBC, le BMM se connecte toujours au serveur Sql d'origine jusqu'à ce que L'accès soit redémarré.
y a-t-il un moyen de relayer ces tables de serveur liées sans redémarrer L'accès?
EDIT: je tiens à faire dans le code
2 réponses
vous pouvez utiliser le code ci-dessous pour rafraîchir toutes les tables ODBC de votre projet D'accès à un DSN donné.
Comment l'utiliser
il suffit de copier le code dans un module VBA nouveau ou existant et, si vous voulez rafraîchir les liens, appelez - le avec le DSN approprié pour la nouvelle connexion ODBC:
RefreshODBCLinks "ODBC;DRIVER=SQL Server Native Client 10.0;" & _"
"SERVER=SQLSERVER;UID=Administrator;" & _
"Trusted_Connection=Yes;" & _
"APP=2007 Microsoft Office system;DATABASE=OrderSystem;"
aussi, jetez un oeil à L'aide D'accès pour le TableDef.RefreshLink
méthode.
Code de la version 1
Classique de la réassociation mais Access peut garder les informations de connexion en mémoire si les tables ont été utilisées avant RefreshODBCLinks
est appelée.
Public Sub RefreshODBCLinks(newConnectionString As String)
Dim db As DAO.Database
Dim tb As DAO.TableDef
Set db = CurrentDb
For Each tb In db.TableDefs
If Left(tb.Connect, 4) = "ODBC" Then
tb.Connect = newConnectionString
tb.RefreshLink
Debug.Print "Refreshed ODBC table " & tb.Name
End If
Next tb
Set db = Nothing
End Sub
Code de la version 2
cela va complètement recréer les tables liées ODBC: les anciennes seront renommées, puis de nouvelles tables utilisant le DSN donné seront créées avant de supprimer l'ancienne version liée.
S'il vous plaît assurez-vous de tester cela et peut-être ajouter du code pour mieux gérer les erreurs si nécessaire.
Note également que le paramètre dbAttachSavePWD
passé lors de la création de la table ODBC sauvegardera le mot de passe ODBC (s'il y en a) dans Access. Retirez-le si ce n'est pas ce dont vous avez besoin.
Public Sub RefreshODBCLinks(newConnectionString As String)
Dim db As DAO.Database
Dim tb As DAO.TableDef
Dim originalname As String
Dim tempname As String
Dim sourcename As String
Dim i As Integer
Set db = CurrentDb
' Get a list of all ODBC tables '
Dim tables As New Collection
For Each tb In db.TableDefs
If (Left(tb.Connect, 4) = "ODBC") Then
tables.Add Item:=tb.Name, key:=tb.Name
End If
Next tb
' Create new tables using the given DSN after moving the old ones '
For i = tables.count To 1 Step -1
originalname = tables(i)
tempname = "~" & originalname & "~"
sourcename = db.TableDefs(originalname).SourceTableName
' Create the replacement table '
db.TableDefs(originalname).Name = tempname
Set tb = db.CreateTableDef(originalname, dbAttachSavePWD, _
sourcename, newConnectionString)
db.TableDefs.Append tb
db.TableDefs.Refresh
' delete the old table '
DoCmd.DeleteObject acTable, tempname
db.TableDefs.Refresh
tables.Remove originalname
Debug.Print "Refreshed ODBC table " & originalname
Next i
Set db = Nothing
End Sub
une dernière chose: si vous avez encore des problèmes qui exigent que vous redémarriez L'accès pour que les changements soient visibles, alors regardez mon code dans redémarrage et compactage programmatique de la base de données sur mon site.
Note: la version 2 du Code s'inspire de partie de cet Accès Web article.
quelle version de Access utilisez-vous? En 2000, vous pouvez aller à outils>utilitaires de base de données>Gestionnaire de Table lié pour changer vos paramètres.