0

Je recherche des conseils et des suggestions sur la façon de synchroniser des données entre deux bases de données.Synchronisation entre les tables SQL Server 2008 Express et VFP

La première base de données est un SQL Server 2008 Express qui s'exécute sur des ordinateurs portables déconnectés (pas d'accès réseau ou Internet). La deuxième base de données (principale) est une VFP 9.0 qui s'exécute sur un serveur. Lorsque l'utilisateur connecte son ordinateur portable sur le réseau, je veux que le processus de synchronisation passe à travers.

autres que les différents moteurs de base de données, j'ai les éléments suivants à prendre en compte:

  1. Les tableaux ne correspondent pas nécessairement la même structure
  2. Les clés primaires ne sont pas les mêmes (GUID dans le SQL Server et souvent une combinaison de champs de caractères dans VFP)
  3. La synchronisation des tables doit être effectuée dans un certain ordre pour respecter les relations parent-enfant
  4. Sur certains insert du côté SQL Server, une nouvelle clé primaire doit être généré et synchronisé ronised dans le tableau VFP
  5. Un groupe de validations doivent être faites et les commentaires de l'utilisateur sont parfois nécessaires
  6. Tous les dossiers doivent être synchronisés
  7. Certains enregistrements sur le serveur SQL doivent être supprimés après la syncronisation
  8. Nécessité de prendre en compte les enregistrements supprimés de chaque côté
  9. modifications minimales doivent être effectuées sur la base de données VFP

Il y a probablement d'autres points que je suis forgotting maintenant, mais je thi Vous avez l'idée du défi auquel je suis confronté. Ma conjecture en ce moment est que je vais devoir construire un module de synchronisation personnalisé, mais je veux que vous entriez avant que je continue, au cas où j'aurais oublié certaines options et pour obtenir quelques conseils sur la façon d'aborder cela. J'ai regardé rapidement Microsoft Sync Framework, mais avec toutes les restrictions que j'ai et le fait qu'il n'y a pas de client VFP déjà construit (AFAIK), je ne pense pas que ce sera d'une grande aide.

Merci d'avance pour vos commentaires.

Mise à jour: L'application pour ordinateur portable est une application C# WinForm et utilise SQL Server 2008 Express.

Répondre

1

La complexité de la situation et des exigences me conduit à croire que vous devez écrire une application Visual FoxPro. Visual FoxPro se connecte aux données SQL Server 2008 facilement. La complexité du code correspond aux exigences et identifie les données qui doivent être synchronisées, pas la syntaxe. La force Visual FoxPro est dans le langage de manipulation de données et la possibilité de se connecter à presque toutes les sources de données (DBF natifs, ODBC, ADO et XML).

SQL Server peut lire les données VFP 9 via le pilote OLE DB VFP 9. Vous pouvez écrire des procédures stockées T-SQL pour accéder aux données VFP. Je ne sais pas comment il reconnaitrait l'ordinateur portable connecté au réseau.

Une autre approche consiste à utiliser SQL Server XML Diffgrams. Je ne suis pas un expert en matière d'imagination sur cette approche, mais ce serait quelque chose que vous pouvez rechercher.

Depuis que mon expertise est avec Visual FoxPro, je trouverais bien plus facile d'aller dans l'autre sens, mais c'est juste moi. Vous devez aller avec la compétence des ressources que vous avez pour le projet. VFP lit et écrit les données SQL Server via une connexion (DSN, ConnectionString) et toute technique impliquant SQL Passthrough (SQLConnect(), SQLExec() et SQLDisconnect()), CursorAdapters, Remote Views ou une combinaison des trois . Un programme Visual FoxPro peut également reconnaître des événements Windows comme la connexion à un réseau.

L'application peut être installée sur chaque ordinateur portable et fonctionner pour reconnaître l'événement Windows. Une fois l'événement déclenché, l'application peut tenter de se connecter à la base de données SQL Server (il est possible qu'elle se connecte à un réseau sans SQL Server disponible ou un réseau différent). Une fois connecté, il exécute la logique pour vérifier et synchroniser les bases de données.

On dirait que vous n'avez pas beaucoup de contrôle sur l'écriture de l'application aux données VFP 9 sur l'ordinateur portable. Si vous avez le contrôle sur l'écriture de l'application dans la base de données VFP 9, vous pouvez envisager de modifier l'application pour écrire dans une instance SQL Server Express sur l'ordinateur portable, puis utiliser la réplication SQL Server pour gérer la synchronisation. Ce n'est pas une tâche triviale et la réplication de SQL Server, tout en s'améliorant avec chaque version, provoque la perte de cheveux dans les administrateurs de base de données. Certainement beaucoup de travail en cours de route.

Rick Schummer Visual FoxPro MVP

+0

Merci pour la réponse. Désolé, mais j'ai oublié de mentionner que l'application pour ordinateur portable est une application C# WinForm que j'ai écrite et utilise SQL Server 2008 Express. Je connais très bien VFP comme je l'ai utilisé pendant plus de 10 ans, mais nous essayons de nous en éloigner pour diverses raisons. – izokurew

+0

Parfois, passer à une autre langue rend les choses plus faciles, et parfois pas tellement. La version de Sedna pour VFP embarquait un fournisseur DDEX pour Visual Studio 2005 (et je pense que cela peut fonctionner avec 2008, mais ne me citez pas dessus). Cela pourrait vous aider à accéder plus facilement aux données dans votre code C#. –

0

Je vous encourage à prendre un autre regard sur le cadre MS de synchronisation. Nous avons une situation dans laquelle nous voulons synchroniser des applications clients C# occasionnellement connectées avec notre backend Java/Oracle. Vous pouvez utiliser les fournisseurs de framework de synchronisation pour le client C# et implémenter votre propre sous-classe personnalisée de KnowledgeSyncProvider pour le backend. Cela vous mènera à mi-chemin et vous montrera un bon schéma à appliquer pour le reste.

Questions connexes