Comment relier les tables de back-end avec le contrôle de boîte de dialogue commune dans Access 2000

Traductions disponibles Traductions disponibles
Numéro d'article: 209862 - Voir les produits auxquels s'applique cet article
Pour une Microsoft Access 97 version de cet article, reportez-vous 181076.
Avancé : Nécessite une matière de programmation, l'interopérabilité et compétences multi-utilisateur.

Cet article s'applique uniquement à une base de données Microsoft Access (.mdb).

Agrandir tout | Réduire tout

Sommaire

Résumé

Cet article explique comment utiliser le contrôle Common Dialog pour actualiser les tables liées dans votre base de données. Le contrôle Common Dialog est disponible avec les outils de Microsoft Office 2000 Developer Edition. Les tables en cours liées peuvent résider dans un ou plusieurs bases de données back-end.

Pour un exemple d'une autre méthode pour relier des tables qui utilise Microsoft Windows fonctions de l'interface de programmation d'applications (API), reportez-vous à l'exemple de programme Developer Solutions (Solutions9.mdb). Pour obtenir Solutions9.mdb, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
248674ACC2000 : Commandes et les bases de données Developer Solutions disponibles sur Microsoft Developer Network (MSDN)
Ouvrez la base de données Solutions9.mdb, sélectionnez utiliser plusieurs bases de données dans la zone Sélectionnez une catégorie des exemples et puis cliquez sur lier les tables au démarrage dans la zone Sélectionnez un exemple.

Plus d'informations

Microsoft fournit des exemples de programmation à des fins d'illustration uniquement, sans garantie expresse ou implicite. Cela inclut, mais n'est pas limité à, les garanties implicites de qualité marchande ou d'adéquation à un usage particulier. Cet article suppose que vous connaissez le langage de programmation présenté et les outils utilisés pour créer et déboguer des procédures. Les techniciens du support technique Microsoft peuvent vous aider à comprendre la fonctionnalité d'une procédure particulière, mais ils ne modifieront pas ces exemples pour fournir des fonctionnalités supplémentaires ou créer des procédures répondant à vos besoins spécifiques. Un programme qui utilise fractionner la conception de la base de données a ses tables dans une base de données dans un emplacement réseau partagé (la base de données back-end) et toutes ses requêtes, formulaires, des rapports, macros et modules dans une autre base de données sur chaque ordinateur client (la base de données frontale). La base de données frontale toutes ses tables lie à la base de données back-end. Si la base de données back-end est déplacé, des erreurs se produisent dans votre programme. Vous pouvez activer votre programme de détecter que le fichier de base de données back-end est absent de son emplacement attendu et puis invite l'utilisateur pour le nouvel emplacement.

L'exemple suivant montre comment relier les données de table dans votre programme. Cette méthode utilise un formulaire un utilisateur peut ouvrir pour rétablir le lien entre les tables de back-end et un autre formulaire facultatif qui peut vérifier automatiquement le lien back-end lorsque la base de données est ouverte.

Cet article suppose que vous avez le contrôle Microsoft Common Dialog, qui est disponible avec les outils de Microsoft Office 2000 Developer Edition. Si ce contrôle, passez à la fonction Browse() dans l'exemple.

Remarque : Si vous utilisez le contrôle Common Dialog et que vous envisagez de distribuer votre programme de base de données, vous devez utiliser l'Assistant Empaquetage et déploiement pour inclure le contrôle Common Dialog fichier, Comdlg32.ocx et ses DLL de prise en charge avec vos fichiers d'installation. Pour plus d'informations sur l'utilisation de l'Assistant Empaquetage et déploiement, consultez les articles répertoriés dans la section "Références" de cet article.

Méthode permettant de recréer un lien vers des tables de base de données back-end

Attention : Si vous suivez les étapes de cet exemple, vous modifier la base de données Comptoir.mdb. Vous souhaiterez peut-être sauvegarder le fichier Comptoir.mdb et suivre ces étapes sur une copie de la base de données.

  1. Créez un fichier de base de données Access vide et nommez-la FrontEnd.mdb.
  2. Dans le menu fichier, pointez sur Données externes et cliquez sur Lier les tables.
  3. Recherchez et sélectionnez la base de données Comptoir.mdb, puis cliquez sur lier. Dans la boîte de dialogue Attacher les tables, cliquez sur Sélectionner tout, puis cliquez sur OK.
  4. Créez le nouveau formulaire suivant ne pas fondé sur une table ou une requête en mode création :
    Formulaire : frmNewDataFile

    Zone de texte :
    Nom : txtFileName
    Largeur: 3 "
    Contrôle du dialogue commun :
    Nom : xDialog
    Bouton de commande :
    Nom : cmdBrowse
    Légende : Parcourir...
    Sur le clic : =Browse()
    Bouton de commande :
    Nom : cmdLinkNew
    Légende : Actualisation des liens
    Sur le clic : =Processtables()
    Bouton de commande :
    Nom : cmdCancel
    Légende : Annuler
    OnClick: [Procédure événementielle]
    Annuler : Oui
  5. Dans le menu affichage, cliquez sur code.
  6. Tapez ou collez la procédure suivante :
    Private Sub cmdCancel_Click()
       On Error GoTo Err_cmdCancel_Click
     
       MsgBox "Link to new back-end cancelled", vbExclamation, "Cancel Refresh Link"
       DoCmd.Close acForm, Me.Name
    
    Exit_cmdCancel_Click:
       Exit Sub
    
    Err_cmdCancel_Click:
       MsgBox Err.Description
       Resume Exit_cmdCancel_Click
    
    End Sub
    					
  7. Dans le menu Déboguer, cliquez sur Compiler FrontEnd.
  8. Enregistrez le formulaire frmNewDataFile et fermez-le.
  9. Dans la fenêtre base de données, cliquez sur modules, puis cliquez sur Nouveau.
  10. Dans le menu Outils, cliquez sur références, sélectionnez Bibliothèque d'objets Microsoft DAO 3.6 si elle n'est pas déjà sélectionnée et cliquez sur OK.
  11. Tapez ou collez le code suivant :
    Dim UnProcessed As New Collection
           
    Public Function Browse()
        ' Prompts user for back-end database file name.
        On Error GoTo Err_Browse
        
        Dim strFilename As String
        Dim oDialog As Object
        Set oDialog = [Forms]![frmNewDatafile]!xDialog.Object
        
        With oDialog                    ' Ask for new file location.
            .DialogTitle = "Please Select New Data File"
            .Filter = "Access Database(*.mdb;*.mda;*.mde;*.mdw)|" & _
            "*.mdb; *.mda; *.mde; *.mdw|All(*.*)|*.*"
            .FilterIndex = 1
            .ShowOpen
            If Len(.FileName) > 0 Then  ' user responded, put selection into text box on form.
               [Forms]![frmNewDatafile]![txtFileName] = .FileName
            End If
        End With
    
    Exit_Browse:
        Exit Function
    
    Err_Browse:
        MsgBox Err.Description
        Resume Exit_Browse
    
    End Function
    
    Public Sub AppendTables()
    
        Dim db As DAO.Database, x As Variant
        Dim strTest As String
        ' Add names of all table with invalid links to the Unprocessed Collection.
        Set db = CurrentDb
        ClearAll
        For Each x In db.TableDefs
            If Len(x.Connect) > 1 And Len(Dir(Mid(x.Connect, 11))) = 0 Then
            ' connect string exists, but file does not
                 UnProcessed.Add Item:=x.Name, Key:=x.Name
            End If
        Next
    
    End Sub
    
    Public Function ProcessTables()
    
        Dim strTest As String
        On Error GoTo Err_BeginLink
        
        ' Call procedure to add all tables with broken links into a collection.
        AppendTables
        
        ' Test for existence of file name\directory selected in Common Dialog Control.
        strTest = Dir([Forms]![frmNewDatafile]![txtFileName])
        
        On Error GoTo Err_BeginLink
        If Len(strTest) = 0 Then   ' File not found.
            MsgBox "File not found. Please try again.", vbExclamation, "Link to new data file"
            Exit Function
        End If
        
        ' Begin relinking tables.
        Relinktables (strTest)
        ' Check to see if all tables have been relinked.
        CheckifComplete
        
        DoCmd.Echo True, "Done"
        If UnProcessed.Count < 1 Then
             MsgBox "Linking to new back-end data file was successful."
        Else
             MsgBox "Not All back-end tables were successfully relinked."
        End If
        DoCmd.Close acForm, [Forms]![frmNewDatafile].Name
        
    Exit_BeginLink:
        DoCmd.Echo True
        Exit Function
        
    Err_BeginLink:
        Debug.Print Err.Number
        If Err.Number = 457 Then
            ClearAll
            Resume Next
        End If
        MsgBox Err.Number & ": " & Err.Description
        Resume Exit_BeginLink
    
    End Function
    
    Public Sub ClearAll()
        Dim x
        ' Clear any and all names from the Unprocessed Collection.
        For Each x In UnProcessed
           UnProcessed.Remove (x)
        Next
    End Sub
    
    Public Function Relinktables(strFilename As String)
    
        Dim dbbackend As DAO.Database, dblocal As DAO.Database, ws As Workspace, x, y
        Dim tdlocal As DAO.TableDef
        
        On Error GoTo Err_Relink
        
        Set dbbackend = DBEngine(0).OpenDatabase(strFilename)
        Set dblocal = CurrentDb
        
        ' If the local linked table name is found in the back-end database
        ' we're looking at, Recreate & Refresh its connect string, and then
        ' remove its name from the Unprocessed collection.
         For Each x In UnProcessed
            If Len(dblocal.TableDefs(x).Connect) > 0 Then
                For Each y In dbbackend.TableDefs
                    If y.Name = x Then
                        Set tdlocal = dblocal.TableDefs(x)
                        tdlocal.Connect = ";DATABASE=" & _
                        Trim([Forms]![frmNewDatafile]![txtFileName])
                        tdlocal.RefreshLink
                        UnProcessed.Remove (x)
                    End If
                Next
            End If
        Next
    
    Exit_Relink:
        Exit Function
    
    Err_Relink:
        MsgBox Err.Number & ": " & Err.Description
        Resume Exit_Relink
    
    End Function
    
    Public Sub CheckifComplete()
    
        Dim strTest As String, y As String, notfound As String, x
        On Error GoTo Err_BeginLink
        
        ' If there are any names left in the unprocessed collection,
        ' then continue.
        If UnProcessed.Count > 0 Then
            For Each x In UnProcessed
                notfound = notfound & x & Chr(13)
            Next
            ' List the tables that have not yet been relinked.
            y = MsgBox("The following tables were not found in " & _
            Chr(13) & Chr(13) & [Forms]![frmNewDatafile]!txtFileName _
            & ":" & Chr(13) & Chr(13) & notfound & Chr(13) & _
            "Select another database that contains the additional tables?", _
            vbQuestion + vbYesNo, "Tables not found")
            
            If y = vbNo Then
                Exit Sub
            End If
            
            ' Bring the Common Dialog Control back up.
            Browse
            strTest = Dir([Forms]![frmNewDatafile]![txtFileName])
            If Len(strTest) = 0 Then   ' File not found.
                MsgBox "File not found. Please try again.", vbExclamation, _
                "Link to new data file"
                Exit Sub
           End If
           Debug.Print "Break"
           Relinktables (strTest)
        Else
           Exit Sub
        End If
        
        CheckifComplete
        
    Exit_BeginLink:
        DoCmd.Echo True   ' Just in case of error jump.
        DoCmd.Hourglass False
        Exit Sub
    
    Err_BeginLink:
        Debug.Print Err.Number
        If Err.Number = 457 Then
            ClearAll
            Resume Next
        End If
        MsgBox Err.Number & ": " & Err.Description
        Resume Exit_BeginLink
    
    End Sub
    					
  12. Dans le menu Déboguer, cliquez sur Compiler FrontEnd.
  13. Enregistrez le module sous RelinkCode et fermez-le.
  14. Renommer la base de données exemple Comptoir.mdb ou déplacer vers un autre dossier sur votre disque dur afin que les tables liées dans FrontEnd.mdb deviez être actualisé.
  15. Ouvrez le formulaire frmNewDataFile, puis cliquez sur le bouton Parcourir.
  16. Dans la boîte de dialogue Veuillez sélectionner nouveau fichier de données, recherchez Northwind.mdb dans son nouveau dossier, puis cliquez sur Ouvrir.

    Notez que le chemin d'accès et le nom de la base de données apparaît dans la zone de texte sur votre formulaire.
  17. Cliquez sur le bouton Actualiser les liens du formulaire.

    Notez que vous recevez le message suivant lorsque la procédure est terminée :
    Liaison à un nouveau fichier de données back-end a réussi.

Création d'un formulaire de démarrage pour vérifier des tables attachées

Pour vérifier les liens vers les tables principales automatiquement chaque fois que vous ouvrez la base de données FrontEnd.mdb, vous pouvez créer un formulaire masqué à cet effet en procédant comme suit :
  1. Créer un nouveau formulaire ne pas fondé sur une table ou une requête en mode Création vue.
  2. Dans le menu affichage, cliquez sur code.
  3. Tapez la procédure suivante à exécuter lorsque le formulaire s'ouvre :
    Private Sub Form_Open(Cancel As Integer)
          ' Tests a linked table for valid back-end.
          On Error GoTo Err_Form_Open
          Dim strTest As String, db As DAO.Database
          Dim td As DAO.TableDef
          Set db = CurrentDb
          For Each td In db.TableDefs
             If Len(td.Connect) > 0 Then   ' Is a linked table.
                On Error Resume Next   ' Turn off error trap.
                strTest = Dir(Mid(td.Connect, 11))   ' Check file name.
                On Error GoTo Err_Form_Open   ' Turn on error trap.
                If Len(strTest) = 0 Then   ' No matching file.
                   If MsgBox("Couldn't find the back-end file " & _
                      Mid(td.Connect, 11) & ". Please choose new data file.", _
                      vbExclamation + vbOKCancel + vbDefaultButton1, _
                      "Can't find backend data file.") = vbOK Then
                         DoCmd.OpenForm "frmNewDataFile"   ' Open prompt form.
                         DoCmd.Close acForm, Me.Name
                         Exit Sub                          ' to refresh links
                   Else
                      MsgBox "The linked tables can't find their source. " & _
                      "Please log onto network and restart the application."
                   End If
                End If
             End If
          Next   ' Loop to next tabledef.
          DoCmd.Close acForm, Me.Name
    Exit_Form_Open:
          Exit Sub
    Err_Form_Open:
          MsgBox Err.Number & ": " & Error.Description
          Resume Exit_Form_Open
          End Sub
    					
  4. Dans le menu Déboguer, cliquez sur Compiler FrontEnd.
  5. Enregistrez le formulaire sous frmCheckLink et fermez-le.
  6. Pour définir frmCheckLink comme le formulaire de démarrage, dans les Outils menu cliquez sur démarrage, sélectionnez frmCheckLink dans la liste Afficher formulaire/page et puis cliquez sur OK.
  7. Pour rendre frmCheckLink un formulaire masqué, cliquez avec le bouton droit sur frmCheckLink dans la fenêtre base de données, cliquez sur Propriétés dans le menu contextuel, activez la case à cocher masqué dans la boîte de dialogue Propriétés frmCheckLink et puis cliquez sur OK.
  8. Déplacer la base de données exemple Comptoir.mdb vers un autre dossier sur votre disque dur afin que les tables liées dans FrontEnd.mdb deviez être actualisé.
  9. Fermez, puis rouvrez FrontEnd.mdb.

    Notez que message d'erreur suivant s'affiche
    Ne peut pas trouver le fichier principal database file. Choisissez nouveau fichier de données.
    database file est le nom de chemin d'accès et de votre base de données back-end.

    Si vous cliquez sur OK, le formulaire frmNewDataFile s'affiche et vous permet de sélectionner une nouvelle base de données back-end, puis comment actualiser vos liens de la table. Si vous cliquez sur Annuler, vous recevez message d'erreur suivantes :
    Les tables liées ne peut pas trouver leur source. Ouvrez une session sur le réseau et redémarrez le programme.

Références

Pour plus d'informations sur la personnalisation de l'exemple de rafraîchissement des tables liées dans l'exemple Developer Solutions programme (Solutions9.mdb), cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
154397ADT/ODE comment modifier le Module RefreshTableLinks dans solutions.mdb
Pour plus d'informations sur l'Assistant Empaquetage et déploiement, cliquez sur les numéros ci-dessous pour afficher les articles correspondants dans la base de connaissances Microsoft :
240956MOD2000 : Assistant Empaquetage et déploiement maintenant utilisé pour créer une application distribuer
236143MOD2000 : Comment faire pour démarrer l'Assistant Empaquetage et déploiement

Propriétés

Numéro d'article: 209862 - Dernière mise à jour: jeudi 23 juin 2005 - Version: 3.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Access 2000 Standard Edition
Mots-clés : 
kbmt kbprogramming kberrmsg kbhowto kbinfo KB209862 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 209862
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com