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

11
demandé sur BTB 2009-02-19 10:19:43

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.

29
répondu Renaud Bompuis 2009-04-10 02:43:13

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.

5
répondu Dinci Garrone 2009-02-19 07:43:07