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

Je tiens d'ores et déjà à te remercier pour cette grande avancée que nous avons réalisée aujourd'hui.
C'est super!
0
Bonjour Blux,

Et si on enchaînait sur le problème de la 1ère visite après ce break bien mérité !!!
Je compte sur toi pour en finir avec ce thème.
J'aurais ensuite 2 autres problèmes à soulever à propos de ces bases fractionnées. Mais ça fera l'objet d'un autre dossier afin de ne pas alourdir d'avantage celui-ci.
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
19 oct. 2012 à 14:47
Malheureusement, je ne pourrai pas faire grand-chose aujourd'hui car il faut que j'avoue à la face du monde un honteux, lourd et terrible secret :





























































J'ai un métier...

;-)
0
Alors bon courage, et si je n'ai pas le plaisir d'avoir de tes nouvelles d'ici là, bon WE.
0
Bonjour Blux,

Je me permets de revenir vers toi pour savoir quand est-ce que tu penses pouvoir m'aider à finaliser?
Merci encore pour ton aide
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
26 oct. 2012 à 09:41
Je te propose quelque chose aujourd'hui, dans la matinée...
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 26/10/2012 à 10:16
Bon, il y a trois choses à faire :

1 - Positionner la valeur de Liaison dans TblLiaisonDorsale à faux, car sinon la valeur est 'NULL' (il suffit de décocher la case dans la table)
2 - Modifier la procédure MAJ, pour lui dire que si on a fait la mise à jour des liens il convient de mettre à jour le champ liaison de la table TblLiaisonDorsale
3 - Créer la procédure à mettre dans l'ouverture du formulaire principal.

1 - Tu devrais y arriver
2 - Ajouter une déclaration de variable en début de procédure (après tous les DIM existants) et mettre
Dim StrSql As String

Ajouter ensuite dans le code après la ligne "Set Db = Nothing"

        StrSql = "UPDATE TblLiaisonDorsale SET Liaison = -1;"  
        DoCmd.SetWarnings False  
        DoCmd.RunSQL (StrSql)  
        DoCmd.SetWarnings True

3 - Créer un code évènement "sur ouverture" du formulaire principal et mettre ce code :

If DLookup("Liaison", "TblLiaisonDorsale") = 0 Then  
    MAJ  
End If  

Ca devrait marcher...
0

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

Posez votre question
Plusieurs choses :
Tout d'abord merci de revenir vers moi

J'ai effectué les MAJ ci-dessus et il en résulte que :
- lorsque je lance la MAJ des liaisons tel que nous l'avions mise en place précédemment et en ayant intégrer les nouvelles lignes de codes développées ci-dessus, la procédure fonctionne toujours correctement
- si j'ouvre ma base en ayant préalablement déplacé le frontal dans un autre répertoire, la procédure de MAJ ne se lance pas

Quelques points me surprennent :
- 2 - Modifier la procédure MAJ, pour lui dire que si on a fait la mise à jour des liens il convient de mettre à jour le champ liaison de la table TblLiaisonDorsale :
Ne convient-il pas de mettre la valeur à 1 (et non à -1)?

- 3 - Créer un code évènement "sur ouverture" du formulaire principal et mettre ce code :
Il me semblait que Vrai = 1 et Faux =-1 et on fait un test sur une valeur = 0 à l'ouverture du formulaire principal....

Ne manque t'il pas quelque chose dans la procédure pour tester à l'ouverture du frontal que la liaison avec la dorsale se fait bien?
0
Oublie les commentaires ci-dessus.
Je reviens vers toi dès que possible.
0
Me revoilà.
Mes connaissances sur les champs OUI/NON laissaient plutôt à désirer : restons à OUI = -1 et NON = 0 et oublions ce commentaire du 26 (comme quoi les connaissances ne sont jamais définitivement acquises...).

Ceci dit, la procédure de démarrage fonctionne bien (il suffisait de créer réellement un enregistrement dans la table tblLiaisonDorsale en cliquant 2 fois de suite dans le champ OUI/NON...).

Encore une fois merci!

Cependant, 2 choses me gênent :
- pour que la procédure de MAJ des liaisons soit lancée à l'ouverture, il faut avoir placé manuellement le booléen à 0 avant la fermeture de la base ....
Ne serait-il pas mieux de faire en sorte que la procédure de MAJ se lance à l'ouverture dès lors que la liaison avec la dorsale ne s'effectue pas? (mais peut-être serait-ce un peu trop abusé de ma part...)
- le 2ème point est plus gênant : il semble lorsque la procédure de MAJ est lancée la 1ère fois, qu'une liste des tables de la dorsale soit créée quelque part, et serve ensuite de référence pour les MAJ des liaisons à venir. Il en résulte à priori, qu'il n'est pas possible de faire évoluer ultérieurement l'applicatif en créant d'autres tables dans la dorsale. J'ai fait 2 tests :
- création d'une nouvelle table dans la dorsale : la procédure de MAJ l'ignore)
- Modification d'un nom de table de la dorsale : la procédure de MAJ se plante. Access ne trouve plus le nom initial de la table (ce qui tend à prouver qu'une liste est bien constituée à la 1ère MAJ, mais je ne sais pas où...)
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
29 oct. 2012 à 11:19
Ceci dit, la procédure de démarrage fonctionne bien (il suffisait de créer réellement un enregistrement dans la table tblLiaisonDorsale en cliquant 2 fois de suite dans le champ OUI/NON...).
C'est que j'ai indiqué dans mon point 1.

Ne serait-il pas mieux de faire en sorte que la procédure de MAJ se lance à l'ouverture dès lors que la liaison avec la dorsale ne s'effectue pas? (mais peut-être serait-ce un peu trop abusé de ma part...)
Ce n'est pas ce qui est demandé au départ, il était question d'une 'première visite', c'est-à-dire que l'on vient d'installer la frontale sur un poste, mais il ne voit pas la dorsale. C'est le cas de la première installation.
Ca peut sûrement se solutionner (je ne l'ai cependant jamais fait).

- le 2ème point est plus gênant : il semble lorsque la procédure de MAJ est lancée la 1ère fois, qu'une liste des tables de la dorsale soit créée quelque part, et serve ensuite de référence pour les MAJ des liaisons à venir. Il en résulte à priori, qu'il n'est pas possible de faire évoluer ultérieurement l'applicatif en créant d'autres tables dans la dorsale. J'ai fait 2 tests :
- création d'une nouvelle table dans la dorsale : la procédure de MAJ l'ignore)
- Modification d'un nom de table de la dorsale : la procédure de MAJ se plante. Access ne trouve plus le nom initial de la table (ce qui tend à prouver qu'une liste est bien constituée à la 1ère MAJ, mais je ne sais pas où...)

Comportement tout à fait normal...
- Lorsque tu as créé ta frontale tu es allée dire que les tables étaient liées à la dorsale.
Si tu créés une table dans la dorsale, comment veux-tu que la frontale soit au courant si tu ne créés pas la table liée correspondante dans la frontale ?
- modification d'un nom de table dans la dorsale qui plante le code VBA : tu auras le même problème si tu fais ta gestion de tables liées avec le menu (sans code VBA).

Si tu es dans un cadre de développement classique, alors tu ne dois distribuer que des frontales (fichiers .mde ou .accde), c'est donc à toi de gérer le changement de modèle de données...

En fait, il suffit de comprendre qu'access n'est pas en mesure d'analyser ce genre de modifications humaines...

Mes connaissances sur les champs OUI/NON laissaient plutôt à désirer : restons à OUI = -1 et NON = 0
Dans tous les basic que j'ai utilisés (et dans d'autres langages), cette convention a toujours existé...
0
Ca peut sûrement se solutionner (je ne l'ai cependant jamais fait).
Si un jour tu as la solution, ça m'intéresse

Quoi qu'il en soit, je tiens à te faire part de toute ma reconnaissance pour ce que tu as fait pour moi. Un grand merci pour le temps que tu m'as consacré, pour ta patience, ton dévouement et ta gentillesse!
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 31/10/2012 à 10:26
Je viens de regarder (ça pourra aussi me servir un jour, qui sait).

Il suffit de créer une macro 'autoexec' qui exécutera une fonction de test des attaches.

1 - Créer dans un module une fonction de vérification de l'ouverture possible des tables, si pas possible appeler la procédure de mise à jour des liens.

Function Ctrl_Liens() 
Dim Db As Database 
Dim Tb As TableDef 
Dim Rs As DAO.Recordset 
Set Db = CurrentDb 
' Test des attachements 
' On exclut les tables système 
' ainsi que les tables non attachées 
On Error GoTo Fin: 
For Each Tb In Db.TableDefs 
    If Left(Tb.Name, 4) <> "MSys" And Tb.Connect <> "" Then 
        Set Rs = Db.OpenRecordset(Tb.Name) 
        Rs.Close 
    End If 
Next 
Fin: 
If Err.Number = 3024 Then 
    MAJ() 
Else 
    MsgBox "Erreur " & Err.Number & " : " & Err.Description 
End If 
End Function 

2 - Créer une macro (qui sera enregistrée sous le nom obligatoire de 'autoexec'). Elle comprendra l'action 'exécutercode' et prendra comme paramètre 'Ctrl_Liens ()', soit le nom de la fonction créée auparavant...

Ca devrait marcher tout seul...
0
C'est curieux : ça plante sur la ligne MAJ avec comme motif
Erreur de compilation :
Erreur de syntaxe
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
31 oct. 2012 à 11:25
J'ai juste oublié d'ôter les parenthèses...:-(
0
Lorsque j'ouvre la base en conservant les liaisons avec la dorsale, une fenêtre Microsoft Access s'ouvre avec:
Erreur 0 :
OK

et quand je clique sur OK mon formulaire MENU s'ouvre


Si je déplace ma dorsale et que j'ouvre l'ouverture du frontal, j'ai directement la fenêtre "Sélectionner un fichier" qui s'ouvre : C'EST GÉNIAL!!!

Si j'ai bien suivi, il ne reste plus qu'à faire en sorte que le message Erreur 0 ci-dessus ne s'affiche plus, et d'aménager quelque peu ce que nous avions fait précédemment, non?

PS : il faut absolument que je fasse un break, je me reconnecte cet après midi

MERCI MERCI MERCI
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 31/10/2012 à 13:56
Effectivement, la gestion des erreurs est mal faite (je me suis dépêché), remplace par ça :

On Error GoTo Erreur:   
For Each Tb In Db.TableDefs   
    If Left(Tb.Name, 4) <> "MSys" And Tb.Connect <> "" Then   
        Set Rs = Db.OpenRecordset(Tb.Name)   
        Rs.Close   
    End If   
Next  
GoTo Fin:   
Erreur:   
If Err.Number = 3024 Then   
    MAJ 
Else   
    MsgBox "Erreur " & Err.Number & " : " & Err.Description   
End If   
Fin:  
End Function 
0
Cette fois-ci, ça a l'air parfait!!! C'est exactement ce qu'il me fallait!!!

Par rapport à ce que nous avions fait précédemment, Je pense que je peux :
- supprimer le booléen
- supprimer la procédure de mise en place pour la 1ère visite (cf : tes consignes du 26/10)


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
31 oct. 2012 à 15:16
Tu fais bien comme tu veux, c'est TON appli ;-)
0
Encore mille mercis!
Ce que tu m'as permis de réaliser est tout simplement FA-BU-LEUX
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
31 oct. 2012 à 16:35
rien d'extraordinaire...
0
Et modeste avec ça!
0
Problème de dernière minute : lorsque je transforme ma base en ACCDE, ça plante à l'ouverture (alors que ça fonctionne très bien en ACCDB).
=> une 1ère fenêtre signale que "L'expression entrée comporte un nom de fonction que Microsoft Access ne peut pas trouver",
=> une seconde m'indique que c'est la macro Autoexec qui plante Sur Action : ExécuterCode, et Argument : Ctrl_liens()
Par ailleurs, à ce stade je n'ai plus aucun bouton qui fonctionne sur mes formulaires...
Comment y remédier?
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 19/11/2012 à 15:18
C'est la frontale que tu as mise en accde ?
0
Oui.
La dorsale est actuellement en accdb. Je ne sais pas encore si dans la version définitive je vais ou non la transformer en 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
19 nov. 2012 à 15:33
Tu l'ouvres sur le poste où tu l'as créée ou c'est ailleurs ?
Je pense à un problème de références : un poste où l'installation d'access n'est pas correcte ou une bizarrerie comme ça...
0
Je l'ouvre toujours sur mon poste
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
19 nov. 2012 à 15:59
Ben là, je suis sec...
0
Merdoum......
J'ai refait un accde (pour voir...), mais j'obtiens les même résultats.....
0
J'ai fait différents tests (en vain...) et il y en a un qui me donne des résultats surprenant, à savoir :
dans ma base accdb, j'ai renommé mon module "CtlLiaisonsOuvertureBase" et lui ait donné le même nom que le code qu'il contient [Ctrl_liens() mais sans saisir les ()], et dans ce cas j'ai le même plantage avec les mêmes messages d'anomalie...
Si ça peut t'éclairer......
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
20 nov. 2012 à 10:33
Je pense que le code disparait quand tu fais un accde, mais je ne sais pas pourquoi...
Peut-être une option cachée ?
0
J'ai continué à faire certains tests et il y en a un autre qui me déroute :

J'ai retiré la fonction qui lançait le code dans la macro autoexec, (il ne reste plus dans cette macro que l'ouverture de mon formulaire Menu). Lorsque que crée un accde, je n'ai plus de message d'anomalie (normal...), mais par contre tous les boutons de mes formulaires restent inactifs....
Je précise que dans les Paramètres des macros dans le Centre de gestion de la confidentialité, j'ai opté pour "Activer toutes les macros"

J'ai fini par réinstaller le pack-office 2010 mais ça ne change rien...
0
J'ai fait testé l'appli (avant transformation en accde) sur un autre poste : à ma grande surprise la macro autoexec plante sur ExecuterCode Action Ctrl_Liens (erreur 2001)..... donc idem que chez moi mais uniquement sur ma base en accde et avec un code erreur n°3270 cette fois-ci...
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
21 nov. 2012 à 11:07
La macro plante sur quelle ligne ?
0
La même qu'avec l'accde à savoir la ligne Action ExécuterCode pour l'argument Ctrl_Liens
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
21 nov. 2012 à 13:20
et si tu ne mets pas cette macro, en appelant la procédure ailleurs ?
0
Si on met la procédure ailleurs le contrôle des liaisons ne se fera plus à l'ouverture de la base.....
Par contre sur cet autre poste j'ai fait supprimer la procédure pour ne laisser que l'ouverture du formulaire "MENU" dans l'autoexec. Et là, il se produit le même phénomène que celui que j'évoquais hier à 12 H 06, à savoir que tous les boutons de mon formulaire "MENU" sont inopérants. La différence c'est qu'hier ça se produisait sur l'accde alors que là nous sommes toujours sur l'accdb.
C'est une histoire de fou!!!
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
21 nov. 2012 à 15:13
Si on met la procédure ailleurs le contrôle des liaisons ne se fera plus à l'ouverture de la base.....
Peu importe, ce que je voudrais savoir, c'est si le code est appelable...
0
J'ai retiré la procédure de l'autoexec et je la lance via les évènements sur ouverture du formulaire MENU. Il en résulte :
- sur accdb : tout se passe bien
- sur accde : pas de message d'anomalie mais la procédure de contrôle ne se lance pas (j'avais modifié le nom de la dorsale pour délier les bases au préalable et rien ne se passe). Par ailleurs, les boutons de mon formulaire MENU sont toujours inopérant.
0
Ça y est, à force de creuser j'ai fini par trouver l'origine du problème de l'accde : c'est un (ou +) formulaire. En créant un accde avec uniquement le formulaire MENU, les boutons fonctionnent!
Maintenant, il faut trouver le(s)quel(s) pose(nt) problème (j'en ai 80 à passer en revue...) et pourquoi.
Je te tiens au courant
0
Cette fois-ci, le problème est résolu! Je passe les détails de tout ce que j'ai pu faire pour en venir à bout....
Au final, j'ai recréé une base vierge dans laquelle j'ai importé tous les objets de mon frontal et j'ai compilé le code.
Maintenant, l'accde qui résulte de cette nouvelle base fonctionne parfaitement (même sur un autre poste que le mien).
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
26 nov. 2012 à 16:21
Super :-)
0