Aller au contenu

Synchronisation bidirectionnelle Access (local) <-> Mysql (web)


Sujets conseillés

Posté

Bonjour à Tous,

Je pense que beaucoup de gens rêvent de pouvoir faire ce que je souhaite, peut-être que certains malins savent déjà le faire :

Synchroniser une base access locale avec une base mysql sur le web.

A noter qu'il ne s'agit pas d'une synchro sur l'ensemble de la base, les 2 bases ont seulement quelques tables en commun.

La meilleure solution : décourager le client de vouloir faire ça, et lui proposer de lui faire un Intranet reposant sur la BDD online...... :whistling:

Bien vu, sauf que là pas de bol ca passe pas : le client a eu une formation Access et du coup est autonome pour générer ses états, or un passage vers Intranet nécessite un développement de notre part à chaque fois qu'il voudra sortir une nouvelle requête, et en plus certaines informations stockées en local ne peuvent pas "éthiquement" se retrouver sur Internet, même protégées.

Bon donc maintenant qu'on a plus le choix, que fait-on ?

Je suis ouvert à toutes suggestions.

Merci d'avance et bonne chance

Posté

Grosso modo deux solutions :

1/ Ouvrir une liaison de données dans access pointant directement sur la base du site.

Avantage : Tout est possible puisque directement accès aux deux

Inconvénients : La partie programmation doit se faire côté Access puisque c'est le seul à voir les deux. En effet il n'est pas trop imaginable de faire un lien depuis le site vers la base Access pour des raisons de sécurité (ou de connexion physique parfois). Les temps de réponses ne sont pas toujours fameux puisqu'on dépend d'une connexion au net... Prévoir du cache et autre peut aider.

Attention, il faut que l'hebergement propose l'accès à distance à la base MySQL, ce qui n'est pas toujours le cas. D'ailleurs en terme de sécurité c'est mieux si ce lien n'est pas proposé.

2/ Travailler par "dump".

L'idée est d'avoir un scrit sur le serveur web qui pond des fichiers de dump, au format texte, csv, sql, ... suffit de bien le déterminer. Côté Access, puisque la mise à jour est bi-directionnelle, prévoir un petit module d'export des données.

Ensuite, une ouverture de connexion FTP pour envoyer au serveur web l'export de données d'Access et rapatrier celui fait par le script web, puis chargement dans Access du dump et chargement dans MySQL de l'export.

Avantage : Pas de connexion lourde, pas limité par une éventuelle sécurité.

Inconvénients : Partie à programmer à la fois dans Access et sur le serveur web.

Dans la solution que j'avais mise en place voici comment j'avais procédé :

Sur le site web :

- Un script qui sauvegarde les tables vers autant de fichier XML que de tables.

Dans Access :

- Un module qui se charge de créer autant de fichier .php que de tables à exporter, fichier comprenant tout ce qu'il faut : connexion à Mysql et les mysql_query(...) qui vont bien

- Un module qui soit capable de lire les fichiers XML qui vont venir du serveur web pour les intégrer dans Access

- Un module qui appelle la page correspondant au script de dump du serveur web

- Un module qui appelle les pages PHP qu'il a lui même pondu

- Un module qui fait la connexion FTP pour poser ses fichiers PHP et faire un get des fichiers XML

Voici comment se passait la synchro, depuis Access :

1/ Appel de la page qui correspond au script de dump sur le serveur web

2/ Lancement de la création des fichiers PHP

3/ Connexion FTP

4/ Dépot des fichiers PHP

5/ Rapatriement des fichiers XML

6/ Suppression des fichiers XML sur le FTP (ménage quoi)

7/ Fermeture FTP

8/ Lecture des fichiers XML pour chargement dans Access

9/ Appel des pages correspondant aux fichiers PHP qui ont été envoyés

10/ Connexion FTP

11/ Suppression des fichiers PHP

12/ Fermeture FTP

Les outils utilisés :

- Commande FTP DOS de windows, assez simple à utiliser en créant des fichiers .bat

- Une instanciation de l'objet d'Internet Explorer pour les appels de pages web depuis Access

Posté (modifié)

autant faire un intranet complet

et rapatrier des données pour les exploiter sur Access en csv en local.

Intranet :

- Tâche Cron qui appelle un script php qui crée un fichier export.csv pour les données à exporter, l'idéal dans un répertoire où les internautes ne peuvent accéder

Local :

- création d'une base de données ACCESS.

- dans Access, créer un script VBA pour la partie FTP ->récupération du fichier CSV

- toujours en VBA, lier la base avec le fichier CSV.

Au démarrage, afficher un dialogue qui demande au monsieur s'il veut importer avec un bouton.

Après, il se sert de sa base comme n'importe quelle base ACCESS

Par contre s'il veut une VRAIE synchro, MyODBC permet à ACCESS de se connecter à MySQL.

Avec tous les problèmes de la couche ODBC.

Le seul soucis, c'est chez l'hébergeur, tu dois pouvoir te connecter à MySQL depuis un poste distant.

Donc il faut prévoir l'hébergement adéquat, en mutualisé, aucune chance.

Par exemple mettre en place un VPN entre ton serveur et le poste local de ton client.

Bon courage(bis)

Modifié par pluriels
Posté

Oui mais a mon avis cela ne marche pas dans le bon sens, je pense que le client final, doit plus faire ses modifs d'infos dans accès, pour les publier après

Posté

j'ai relu le topic pour être plus précis.

Tu gardes les données confidentielles en local.

Le reste passe sur le net.

Plutôt qu'un seul fichier export, tu exportes les tables dont tu as besoin.

Ton client travaille sur la base ACCESS comme si il avait la version en ligne.

Bien expliquer au client que la version locale des tables communes aux 2 systèmes est une version de lecture et de requête.

Pour écrire et modifier les données, il a l'intranet pour ça

Bon courage

Posté (modifié)

Merci à vous 3 pour vos réponses éclairées....

De toutes façons, c'est pas mal compliqué et demande des compétences VBA / ACCESS, on va voir si on sait gérer tout ça.

Pluriels : le problème c'est que le client ne fait pas que de la lecture en local, il gère d'autres choses qui ne peuvent pas être gérées en ligne par sécurité.

Donc on ne peut pas purger puis réimporter la base access à chaque fois.

Mais la piste du "moins d'actions possible en local" me semble bonne....on creuse !

En tout cas, merci à vous pour votre expertise et la rapidité de réaction.

Modifié par occitech
Posté (modifié)

essaie MyODBC

La principale condition est de pouvoir accéder au serveur MySQL depuis le poste de ton client.

Fais bien attention à la sécurité.

Dans ce cas, tu utilises les tables liées d'ACCESS, d'ailleurs ça t'évite VBA.

Modifié par pluriels
  • 2 years later...
Posté

Bonjour,

Malgré le temps qui est passé depuis ce dernier post, je suis aujourd'hui confronté au même problème : la synchro entre 2 applis access et web.

J'ai la main sur l'appli access mais pas sur l'appli web.

Ce qui implique une "détection" des modifs, ajouts et suppression qui ont été executées sur l'applis web & mysql.

est-ce que des outils ont été crées depuis 2007 ?

Bonne soirée et merci pour vos réponses !

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...