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 :
ACC2000 : 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.
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.
Créez un fichier de base de données Access vide et nommez-la FrontEnd.mdb.
Dans le menu fichier, pointez sur Données externes et cliquez sur Lier les tables.
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.
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()
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
Dans le menu Déboguer, cliquez sur Compiler FrontEnd.
Enregistrez le formulaire frmNewDataFile et fermez-le.
Dans la fenêtre base de données, cliquez sur modules, puis cliquez sur Nouveau.
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.
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
Dans le menu Déboguer, cliquez sur Compiler FrontEnd.
Enregistrez le module sous RelinkCode et fermez-le.
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é.
Ouvrez le formulaire frmNewDataFile, puis cliquez sur le bouton Parcourir.
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.
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 :
Créer un nouveau formulaire ne pas fondé sur une table ou une requête en mode Création vue.
Dans le menu affichage, cliquez sur code.
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
Dans le menu Déboguer, cliquez sur Compiler FrontEnd.
Enregistrez le formulaire sous frmCheckLink et fermez-le.
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.
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.
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é.
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.
où 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.
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 :
ADT/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 :
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
(http://support.microsoft.com/kb/209862/en-us/
)
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.
Merci ! Vos commentaires sont très utiles pour l'amélioration de notre contenu d'aide et de support. Si vous avez besoin d'aide complémentaire, veuillez consulter la page d'accueil d'aide et support.