Base ACCESS 2010 fractionnée et liaison UNC
Maud
-
blux Messages postés 27121 Date d'inscription Statut Modérateur Dernière intervention -
blux Messages postés 27121 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Le problème des bases ACCESS 2010 fractionnées à installer sur un poste « Client » après les avoir verrouillées (par conversion des bases accdb en accde) est de pouvoir conserver les liaisons sur n'importe quel poste entre la base frontale et la base dorsale.
Pour cela, il semble qu'il faille utiliser des liaisons réelles du type UNC et non celles définies avec un lecteur mappé comme H:\, F:\,.....
Est-ce quelqu'un connait la syntaxe à utiliser?
Un grand merci pour votre aide
Le problème des bases ACCESS 2010 fractionnées à installer sur un poste « Client » après les avoir verrouillées (par conversion des bases accdb en accde) est de pouvoir conserver les liaisons sur n'importe quel poste entre la base frontale et la base dorsale.
Pour cela, il semble qu'il faille utiliser des liaisons réelles du type UNC et non celles définies avec un lecteur mappé comme H:\, F:\,.....
Est-ce quelqu'un connait la syntaxe à utiliser?
Un grand merci pour votre aide
A voir également:
- Base ACCESS 2010 fractionnée et liaison UNC
- Base de registre - Guide
- Clé activation office 2010 gratuit - Télécharger - Sécurité
- Word 2010 - Télécharger - Traitement de texte
- Gigaset ne reconnait plus sa base - Forum telephonie fixe
- Liaison torride avis ✓ - Forum Vos droits sur internet
60 réponses
(hors table TblLiaisonDorsale) : cette table figure dans le frontal
Toutes les tables contenues dans la dorsale sont bien liées
Toutes les tables contenues dans la dorsale sont bien liées
la frontale est la base que voit l'utilisateur, et la dorsale est celle qui contient les tables :
Tout à fait d'accord
les tables contenues dans la dorsale sont liées, en fait, pour moi, c'est le contraire :
Je pense que l'on parle de la même chose : quand on regarde la liste des tables dans la frontale, on voit :
- d'une part celles qui sont propres à la frontale
- d'autre part les tables liées à la dorsale
OK?
Tout à fait d'accord
les tables contenues dans la dorsale sont liées, en fait, pour moi, c'est le contraire :
Je pense que l'on parle de la même chose : quand on regarde la liste des tables dans la frontale, on voit :
- d'une part celles qui sont propres à la frontale
- d'autre part les tables liées à la dorsale
OK?
Ce n'est pourtant pas compliqué, il s'agit de récupérer une valeur dans une table et de s'en servir lorsque l'on fait une boucle sur les tables de la base courante pour mettre à jour leurs attaches.
Dans le cas qui nous intéresse, il suffit d'aller chercher dans la table la valeur du booléen de "première visite" et dans le cas où il est vrai d'ouvrir une boite de dialogue pour sélectionner un fichier mdb, récupérer son chemin complet et le passer en paramètre de la boucle qui met à jour les attaches.
Dans le cas qui nous intéresse, il suffit d'aller chercher dans la table la valeur du booléen de "première visite" et dans le cas où il est vrai d'ouvrir une boite de dialogue pour sélectionner un fichier mdb, récupérer son chemin complet et le passer en paramètre de la boucle qui met à jour les attaches.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Voici donc un peu de code que tu vas mettre dans un module access.
Ensuite, tu pourras créer un bouton sur ton formulaire et faire référence à ce module simplement en l'appelant (évènement sur clic du bouton) :
Essaie de faire tourner ceci d'abord, on verra ensuite pour le test de la première visite.
A+ blux
Sub MAJ() Dim Db As Database Dim Tb As TableDef Dim Unc As String Dim Rep As Integer Dim Fd As FileDialog Dim SelectedFile As Variant Dim NomBase As String ' Ouverture d'une boite de dialogue pour choix de la base à lier Set Fd = FileDialog(msoFileDialogOpen) With Fd .AllowMultiSelect = False .ButtonName = "Ouvrir" .Filters.Clear .Filters.Add "Bases Access", "*.mdb" .InitialFileName = "*.mdb" .InitialView = msoFileDialogViewList .Title = "sélectionnez un fichier" If .Show Then For Each SelectedFile In .SelectedItems NomBase = SelectedFile Next SelectedFile End If End With Set Fd = Nothing ' Mise à jour des attaches Set Db = CurrentDb Unc = ";DATABASE=" & NomBase ' Test des attachements ' On exclut les tables système ' ainsi que les tables non attachées For Each Tb In Db.TableDefs If Left(Tb.Name, 4) <> "MSys" And Tb.Connect <> "" Then MsgBox "Table :" & Tb.Name & vbCrLf & "actuellement attachée à" & vbCrLf & "Chemin : " & Tb.Connect Rep = MsgBox("Mettre à jour la table " & Tb.Name & vbCrLf & "pour pointer sur " & Unc & " ?", vbYesNo, "Confirmation...") If Rep = vbYes Then Tb.Connect = Unc Tb.RefreshLink End If End If Next Set Db = Nothing End Sub
Ensuite, tu pourras créer un bouton sur ton formulaire et faire référence à ce module simplement en l'appelant (évènement sur clic du bouton) :
Private Sub Commande10_Click() MAJ End Sub
Essaie de faire tourner ceci d'abord, on verra ensuite pour le test de la première visite.
A+ blux
"Les cons, ça ose tout. C'est même à ça qu'on les reconnait"
C'est fait.
Par contre, quand je clique sur le bouton, il m'envoie un message d'erreur :
=> sur la ligne Fd Dim As FileDialog
Erreur de compilation :
Type défini par l'utilisateur non défini
Par ailleurs, je t'avais déjà signalé que mon formulaire MENU qui s'ouvre au démarrage (avec macro Autoexec) est adossé à une table qui se trouve dans la dorsale. Est-ce que ça pose problème?
Par contre, quand je clique sur le bouton, il m'envoie un message d'erreur :
=> sur la ligne Fd Dim As FileDialog
Erreur de compilation :
Type défini par l'utilisateur non défini
Par ailleurs, je t'avais déjà signalé que mon formulaire MENU qui s'ouvre au démarrage (avec macro Autoexec) est adossé à une table qui se trouve dans la dorsale. Est-ce que ça pose problème?
Tu l'appelles comme tu veux, l'important sera de le nommer correctement quand on voudra l'exécuter :-)
Pour l'erreur du code, il faut que tu rattaches Microsoft Office xx.x object library et Microsoft DAO xx.x object library à ton projet.
Lorsque le code est planté, tu cliques sur le bouton 'arrêter' (un carré bleu qui fait réinitialiser), tu vas ensuite dans 'outils/références et tu coches ce que j'ai indiqué.
Pour l'erreur du code, il faut que tu rattaches Microsoft Office xx.x object library et Microsoft DAO xx.x object library à ton projet.
Lorsque le code est planté, tu cliques sur le bouton 'arrêter' (un carré bleu qui fait réinitialiser), tu vas ensuite dans 'outils/références et tu coches ce que j'ai indiqué.
C'est fait.
Un nouveau message s'est affiché " Nom de module, de projet ou de bibliothèque d'objets déjà utilisé"
J'ai cliqué sur OK.
Quand je clique à nouveau sur le bouton que j'ai créé sur le formulaire "MENU", le même message d'anomalie (Erreur de compilation..) apparaît.
Par contre, le menu déroulant n'apparaît plus lorsque je clique sur "Réinitialisation"....
Un nouveau message s'est affiché " Nom de module, de projet ou de bibliothèque d'objets déjà utilisé"
J'ai cliqué sur OK.
Quand je clique à nouveau sur le bouton que j'ai créé sur le formulaire "MENU", le même message d'anomalie (Erreur de compilation..) apparaît.
Par contre, le menu déroulant n'apparaît plus lorsque je clique sur "Réinitialisation"....
Oublie l'histoire du menu déroulant (il était tard...).
Quand je refais la manip, je m'aperçois que les 2 références ne sont plus cochées, donc je les re-coche et fais OK. Et là le message " Nom de module, de projet ou de bibliothèque d'objets déjà utilisé" apparaît tout de suite...
Quand je refais la manip, je m'aperçois que les 2 références ne sont plus cochées, donc je les re-coche et fais OK. Et là le message " Nom de module, de projet ou de bibliothèque d'objets déjà utilisé" apparaît tout de suite...
Je reprends :
- je clique sur le bouton que j'ai créé dans le menu pour lancer le module, j'ai un message d'erreur :
=> sur la ligne Fd Dim As FileDialog
Erreur de compilation :
Type défini par l'utilisateur non défini
Je fais donc ce que tu m'a dit, à savoir OK, Réinitialiser, et dans Outils/références je coche les 2 que tu m'as indiquées (Microsoft DAO 3.6 Object librairy et Microsoft office 14.0 Object librairy) puis je clique sur OK.
Et là le message " Nom de module, de projet ou de bibliothèque d'objets déjà utilisé" apparaît tout de suite...
- je clique sur le bouton que j'ai créé dans le menu pour lancer le module, j'ai un message d'erreur :
=> sur la ligne Fd Dim As FileDialog
Erreur de compilation :
Type défini par l'utilisateur non défini
Je fais donc ce que tu m'a dit, à savoir OK, Réinitialiser, et dans Outils/références je coche les 2 que tu m'as indiquées (Microsoft DAO 3.6 Object librairy et Microsoft office 14.0 Object librairy) puis je clique sur OK.
Et là le message " Nom de module, de projet ou de bibliothèque d'objets déjà utilisé" apparaît tout de suite...
Je n'ai pas l'occasion de l'enregistrer, le message d'erreur apparaît tout de suite. Et quand je reviens sur la liste, les 2 références sont décochées.
Je suis sur Access 2010
Je suis sur Access 2010
Il ne me laisse pas le temps d'enregistrer, il m'envoie le message d'erreur tout de suite.
Avant de faire toutes ces manip (création de code, bouton sur menu, etc...), j'avais fait une copie de ma base.
J'ai refais une nouvelle copie et ai recommencé toutes les manip, hélas j'arrive au même résultat..
Avant de faire toutes ces manip (création de code, bouton sur menu, etc...), j'avais fait une copie de ma base.
J'ai refais une nouvelle copie et ai recommencé toutes les manip, hélas j'arrive au même résultat..
'déclaration des variables obligatoires' était déjà décoché.
Dans "Récupération d'erreur, seul "Arrêt sur les erreurs non gérées" est coché
Dans "Récupération d'erreur, seul "Arrêt sur les erreurs non gérées" est coché
les 5 premières à savoir :
- Visual Basic for applications
- Microsoft Access 14.0 Object library
- OLE Automation
- Microsoft Visual Basic for Application extensibility 5...
- Microsoft Office 14.0 Access database engine Object
- Visual Basic for applications
- Microsoft Access 14.0 Object library
- OLE Automation
- Microsoft Visual Basic for Application extensibility 5...
- Microsoft Office 14.0 Access database engine Object
Re,
vous n'avez pas besoin de rajouter Microsoft DAO 3.6 Object librairy, Microsoft Office 14.0 Access database engine Object fait la meme chose et c'est pour cela qu'il y une erreur "de bibliothèque d'objets déjà utilisé". Que tout le monde se rassure c'est par hazard que l'ai decouvert la chose, parce que j'ai toujours utilise DAO3.6 sauf une fois ou j'ai coche Microsoft Office xx.0 Access database engine Object .
Essayez
vous n'avez pas besoin de rajouter Microsoft DAO 3.6 Object librairy, Microsoft Office 14.0 Access database engine Object fait la meme chose et c'est pour cela qu'il y une erreur "de bibliothèque d'objets déjà utilisé". Que tout le monde se rassure c'est par hazard que l'ai decouvert la chose, parce que j'ai toujours utilise DAO3.6 sauf une fois ou j'ai coche Microsoft Office xx.0 Access database engine Object .
Essayez
Merci pour l'info.
Cette foi-ci c'est OK. Quand je lance le module, la fenêtre "Sélectionner un fichier" s'ouvre.
Bravo!
Cette foi-ci c'est OK. Quand je lance le module, la fenêtre "Sélectionner un fichier" s'ouvre.
Bravo!
Bon, on peut donc aller plus en avant.
Pour l'instant, la procédure est bavarde, elle pose la question pour toutes les tables une par une et ne gère pas le fait que l'utilisateur puisse ne rien sélectionner.
Souhaites-tu que l'on mette uniquement un message de confirmation quant au choix de la base et que l'on fasse le traitement pour toutes les tables de manière transparente ?
On en profitera aussi pour tester si un choix a été fait...
Pour l'instant, la procédure est bavarde, elle pose la question pour toutes les tables une par une et ne gère pas le fait que l'utilisateur puisse ne rien sélectionner.
Souhaites-tu que l'on mette uniquement un message de confirmation quant au choix de la base et que l'on fasse le traitement pour toutes les tables de manière transparente ?
On en profitera aussi pour tester si un choix a été fait...
Donc, le code donne ça :
A+ blux
Sub MAJ() Dim Db As Database Dim Tb As TableDef Dim Unc As String Dim Rep As Integer Dim Fd As FileDialog Dim SelectedFile As Variant Dim NomBase As String ' Ouverture d'une boite de dialogue pour choix de la base à lier Set Fd = FileDialog(msoFileDialogOpen) With Fd .AllowMultiSelect = False .ButtonName = "Ouvrir" .Filters.Clear .Filters.Add "Bases Access", "*.mdb" .InitialFileName = "*.mdb" .InitialView = msoFileDialogViewList .Title = "sélectionnez un fichier" If .Show Then For Each SelectedFile In .SelectedItems NomBase = SelectedFile Next SelectedFile End If End With Set Fd = Nothing If NomBase <> "" Then Rep = MsgBox("Mettre à jour les attaches de la base" & vbCrLf & "pour pointer sur " & NomBase & " ?", vbYesNo, "Confirmation...") If Rep = vbYes Then Set Db = CurrentDb Unc = ";DATABASE=" & NomBase ' Test des attachements ' On exclut les tables système ' ainsi que les tables non attachées For Each Tb In Db.TableDefs If Left(Tb.Name, 4) <> "MSys" And Tb.Connect <> "" Then Tb.Connect = Unc Tb.RefreshLink End If Next Set Db = Nothing End If End If End Sub
A+ blux
"Les cons, ça ose tout. C'est même à ça qu'on les reconnait"
C'est fait.
Lorsque je teste, et que la fenêtre "Sélectionner un fichier" s'ouvre, je n'ai accès qu'au type de fichier "Bases Access (*.mdb). Il me faudrait aussi les autres (*.accdb;*.accde;*.accdr)
Lorsque je teste, et que la fenêtre "Sélectionner un fichier" s'ouvre, je n'ai accès qu'au type de fichier "Bases Access (*.mdb). Il me faudrait aussi les autres (*.accdb;*.accde;*.accdr)
Je doute fort que tu aies besoin d'accéder à une base sous format accde (puisque c'est normalement le format de ta frontale).
Quoi qu'il en soit, il te suffit de modifier le code de ces quelques lignes en gras :
Et si tu connais le nom de ta dorsale, tu peux même le mettre dans initialfilename...
Quoi qu'il en soit, il te suffit de modifier le code de ces quelques lignes en gras :
.Filters.Clear .Filters.Add "Bases Access", "*.mdb;*.accdb;*.accde;*.accdr", 1 .InitialFileName = "" .InitialView = msoFileDialogViewList
Et si tu connais le nom de ta dorsale, tu peux même le mettre dans initialfilename...
Et si tu connais le nom de ta dorsale, tu peux même le mettre dans initialfilename... : je préfère laisser "*.mdb;*.accdb;*.accde;*.accdr", 1
afin de lier une dorsale avec un nom différent si besoin ( ex : fichier sauvegardé avec un nom différent)
Par contre, j'avais un message d'anomalie pour cette ligne itfilename.... "Erreur de compilation, Errreur de syntaxe".
J'ai retiré le "1" en fin de ligne, et là.......C'EST PARFAIT, j'arrive à modifier ma dorsale (nom et/ou chemin) à volonté!!!
Est-ce qu'en l'état le contrôle de la liaison se fait également à l'ouverture de la base ou est-ce qu'il reste encore quelque chose à paramétrer?
afin de lier une dorsale avec un nom différent si besoin ( ex : fichier sauvegardé avec un nom différent)
Par contre, j'avais un message d'anomalie pour cette ligne itfilename.... "Erreur de compilation, Errreur de syntaxe".
J'ai retiré le "1" en fin de ligne, et là.......C'EST PARFAIT, j'arrive à modifier ma dorsale (nom et/ou chemin) à volonté!!!
Est-ce qu'en l'état le contrôle de la liaison se fait également à l'ouverture de la base ou est-ce qu'il reste encore quelque chose à paramétrer?
Pour moi, la frontale est la base que voit l'utilisateur, et la dorsale est celle qui contient les tables.
Or tu dis que les tables contenues dans la dorsale sont liées, en fait, pour moi, c'est le contraire.
Est-on d'accord ?