Base ACCESS 2010 fractionnée et liaison UNC

Fermé
Maud - Modifié par Maud le 5/10/2012 à 00:39
blux Messages postés 26504 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 4 décembre 2024 - 26 nov. 2012 à 16:21
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




A voir également:

60 réponses

(hors table TblLiaisonDorsale) : cette table figure dans le frontal

Toutes les tables contenues dans la dorsale sont bien liées
0
blux Messages postés 26504 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 4 décembre 2024 3 317
15 oct. 2012 à 14:29
Il semblerait que nous ne nous soyons pas tout à fait compris...
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 ?
0
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?
0
blux Messages postés 26504 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 4 décembre 2024 3 317
15 oct. 2012 à 15:04
On est d'accord.
As-tu pu regarder ce qui était dans la base stockée chez free ?
As-tu réussi un peu à comprendre l'enchainement ?
0
Mes connaissances en code sont trop limitées pour comprendre.....
0
blux Messages postés 26504 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 4 décembre 2024 3 317
15 oct. 2012 à 17:20
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.
0
Je vois que ça a l'air d'être un jeu d'enfant pour toi!
Je ne peux hélas pas en dire autant.....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
blux Messages postés 26504 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 4 décembre 2024 3 317
Modifié par blux le 16/10/2012 à 14:53
Voici donc un peu de code que tu vas mettre dans un module access.

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"
0
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?
0
Je me rends compte que j'ai nommé mon module "LiaisonTables". Ne fallait-il pas l'appeler "MAJ"?
0
blux Messages postés 26504 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 4 décembre 2024 3 317
16 oct. 2012 à 19:51
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é.
0
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"....
0
blux Messages postés 26504 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 4 décembre 2024 3 317
17 oct. 2012 à 08:58
Quel menu déroulant ?
Les deux références que j'ai indiquées sont-elles bien cochées ?
0
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...
0
blux Messages postés 26504 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 4 décembre 2024 3 317
17 oct. 2012 à 10:01
Si tu as la fenêtre de code affichée, alors tu dois pouvoir aller dans outils/références.
Sinon, quel est le message d'erreur exact et sur quelle ligne ?
0
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...
0
blux Messages postés 26504 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 4 décembre 2024 3 317
17 oct. 2012 à 10:18
Il y a truc qui m'échappe, normalement, quand on coche les références, elles doivent rester cochées...
As-tu enregistré le module après avoir coché ?
Quelle version d'access ?
0
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
0
blux Messages postés 26504 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 4 décembre 2024 3 317
17 oct. 2012 à 10:29
Alors, ouvre le module comme si tu voulais le modifier, coche les deux cases, et enregistre.
Réessaie ensuite.
Ca me surprend...
0
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..
0
Je viens de réessayer après avoir changé le nom du module Liaisontables en LIaisonDesTables : idem, j'ai tjrs le message d'erreur
0
blux Messages postés 26504 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 4 décembre 2024 3 317
17 oct. 2012 à 10:52
Dans le menu outils/options de la fenêtre de code (accessible via ALT-F11), tu peux décocher 'vérification automatique de la syntaxe' et 'déclaration des variables obligatoires' et vérifier ce que tu as dans l'onglet général, section 'récupération d'erreur' du même menu ?
0
'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é
0
blux Messages postés 26504 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 4 décembre 2024 3 317
17 oct. 2012 à 11:02
Ca change quelque chose ?
0
Non
0
f894009 Messages postés 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 1 711
17 oct. 2012 à 11:15
Bonjour a vous deux,

Aucune incruste de ma part, Blux vous manage a merveille.

Quand vous ouvrez outils---->references

Quelles sont les references deja cochees
0
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
0
f894009 Messages postés 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 1 711
Modifié par f894009 le 17/10/2012 à 12:11
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
0
blux Messages postés 26504 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 4 décembre 2024 3 317
17 oct. 2012 à 12:52
Je viens de faire le test, effectivement cette bibliothèque semble couvrir les besoins fournis par DAO 3.x.
0
f894009 Messages postés 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 1 711
17 oct. 2012 à 13:01
Bonjour,

Venant du VB4, 5, 6 comme beaucoup d'entre-nous, DAO3.x etait incontournable pour les appli. VB installees sur des PC sans ACCESS. Par habitude, meme en VBA ACCESS ou EXCEL DAO3.x etait de mise. Mais c'est cette denomination "database engine Object" qui m'avait interpelee.

Bonne suite
0
blux Messages postés 26504 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 4 décembre 2024 3 317
17 oct. 2012 à 13:09
Jamais fait de VB pur, toujours fait que du VBA access (et un peu excel)...

En tout cas, merci pour l'info, on aurait sûrement mis du temps pour la trouver, celle-là ;-)
0
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!
0
blux Messages postés 26504 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 4 décembre 2024 3 317
17 oct. 2012 à 13:12
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...
0
OK, on y va comme ça
0
blux Messages postés 26504 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 4 décembre 2024 3 317
Modifié par blux le 17/10/2012 à 14:54
Donc, le code donne ça :

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"
0
Ce nouveau code est bien à mettre à la place du précédent?
0
blux Messages postés 26504 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 4 décembre 2024 3 317
17 oct. 2012 à 15:47
Absolument, en annule et remplace...
0
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)
0
blux Messages postés 26504 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 4 décembre 2024 3 317
Modifié par blux le 17/10/2012 à 16:25
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 :

    .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...
0
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?
0
blux Messages postés 26504 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 4 décembre 2024 3 317
17 oct. 2012 à 18:45
Il faut gérer la première visite...
0