2010-04-09 6 views
1

Aidez-moi à trouver une solution à un problème (pas si unique).Existe-t-il un moyen de synchroniser les tables (bidirectionnelles) entre un serveur mysql et un MS Access local?

Mon groupe de recherche a des dispositifs GPS attachés aux animaux migrateurs. De temps en temps, une technologie de recherche sera à portée d'un animal et aura la chance de télécharger tous les points enregistrés. Chaque individu crache un seul dbf et les nouveaux emplacements sont juste ajoutés à la fin (donc le fichier est juste cumulatif).

Ces données doivent être partagées entre un groupe de recherche. Tout le monde (à part moi) veut utiliser l'accès, donc ils peuvent faire de petites modifications et préfèrent cette interface. Ils n'aiment pas utiliser MySQL.

La solution que je suis venu avec est:

a) La personne qui télécharge le fichier va vers une page Web, entre l'identification des animaux dans un formulaire, choisit .dbf fichier et ajouts à une base de données MySQL sur le serveur (Je dois encore écrire du code php pour lire le dbf et écrire des instructions d'insertion sql à partir de celui-ci).

b) Tout le monde se synchronise depuis sa base de données d'accès local vers le serveur. (Ceci est nativement possible d'accès mais très maladroit).

Y at-il un outil (de préférence open source), qui peut comparer une table d'accès à la table mysql et synchroniser les deux (les deux façons)?

Ou bien quelqu'un a-t-il une solution plus élégante?

Le but ultime est de permettre à tous d'avoir accès aux données les plus récentes sur leur ordinateur en utilisant leur application de base de données préférée.

Répondre

0

Un indice évident pour la mise en œuvre:

  1. Utilisez UUID() dans MySQL et GUID dans Access identificateurs comme uniques
  2. horodatage magasin de la dernière modification lignes synchronisées

De cette façon, vous distinguerez facilement les mises à jour des enregistrements des nouveaux enregistrements et pourrez fusionner les modifications même vous-même en utilisant ODBC.

+0

GUID dans Access a beaucoup de problèmes (http://trigeminal.com/usenet/usenet011.asp?1033). Je ne vois pas pourquoi c'est même nécessaire. La question initiale indique que les tables sont en addition, donc avec un champ d'auto-incrémentation, vous n'aurez aucun problème à déterminer quels enregistrements ont été ajoutés sans avoir besoin de savoir quoi que ce soit à propos de quand. Je ne vois pas comment un GUID serait plus facile qu'un champ d'auto-incrémentation, sauf si le nombre d'enregistrements impliqués dépasse les valeurs possibles pour le champ. –

+0

@ david-w-fenton, eh bien, comme je vois le problème: chaque utilisateur a une réplique MS Access de la base de données MySQL mise à jour. Chaque utilisateur peut apporter des modifications (ajouter de nouvelles données) à sa base de données de répliques et synchroniser les modifications avec la base de données MySQL plusieurs minutes/heures plus tard. Je vois un problème de concurrence, l'utilisation d'UUID pour de nouvelles entités est une solution. – newtover

0

Y at-il une (source ouverte de préférence ) outil, qui peut comparer un accès tableau à la table mysql et synchroniser les deux (dans les deux sens)?

Avez-vous regardé this SuperUser post?

Aussi, avez-vous googlé? J'ai googlé "accès comparer des bases de données" et le troisième lien sur la page répertorie plusieurs progiciels différents pour comparer les bases de données.

Il semble que certains vous permettent de synchroniser les données et d'autres non.

Pour ce que ça vaut, je l'ai programmé synch multi-maître entre Access et MySQL et il est tout simplement pas que dur, surtout si vous pouvez l'exécuter à partir d'Access avec ODBC tables liées pointant vers les tables de données MySQL en direct. Particulièrement dans le cas où la plupart des nouvelles données dans Access sont de nouveaux enregistrements, cela ne devrait pas être si complexe. D'autre part, ce que je considère pas complexe pourrait être trop décourageant pour vous - je ne connais pas votre niveau de familiarité avec SQL, DAO et VBA.

+0

un vieux post, mais je suis coincé à quelque chose de très similaire, pouvez-vous me guider ici? Merci –