Bonjour,
Je viens vers vous pour avoir des conseils sur le système à mettre en place pour synchroniser une base de données HFSQL C/S et une base de données HFSQL classique embarquée sur un poste mobile (tablette windows).
Cela fait plusieurs jours que je me casse la tête sur la solution à mettre en place... A chaque fois que je pars dans une direction je fais marche arrière car elle ne répond pas à mes attentes...
En quelques mots je vous explique le contexte :
-1 Poste Serveur avec une base HFSQL C/S, connecté au réseau local en CPL
-1 Poste Annexe connecté en CPL au réseau local
-1 Poste mobile (tablette windows) connecté en WIFI au réseau local.
J'ai créé un logiciel avec Windev qui est installé sur le poste Serveur et le poste Annexe. Le logiciel travail avec la base de données HFSQL C/S.
Jusque là tout va bien...
Maintenant je dois créer un logiciel spécifique pour le poste mobile connecté en WIFI. Voici les contraintes :
- rapidité d’exécution
- si possible la tablette doit rester fonctionnelle en mode hors connexion (si panne du WIFI par exemple) pour des saisies qui seront synchronisées quand le WIFI sera rétablie
Je n'ai jamais travaillé dans cette condition (poste WIFI). Savez-vous si les temps d'accès à la base de données HFSQL C/S sont aussi rapide, un peu plus long, beaucoup plus long que lorsqu'on est en ethernet ?
Voici le système que j'avais initialement prévu :
1. Importer l'analyse de la base de données des fichiers HFSQL C/S se trouvant sur le serveur pour m'y connecter par des houvreConnexion et hfermeConnexion au besoin. Chaque fichier contenant une rubrique auto dateHeure dernière modification
2. Dupliquer tous ces fichiers en mode HFSQL classique pour que ce soit ces fichiers qui soient lu par la tablette (rapidité d’exécution)
Je m'explique: La tablette utilise les données des fichiers dupliqués Classic et dans un thread secondaire je lance régulièrement des synchros avec le serveur. J'ai une variable dateHeure qui m'indique la date et heure de la dernière synchronisation avec la base HFSQL C/S. grâce à des requêtes je peux à tout moment interroger le serveur pour connaitre les enregistrements modifiés depuis la dernière synchro. A chaque fois que je récupère des nouvelles données du serveur je créer une copie dans les fichiers HFSQL Classic.
Par ce système je peux donc afficher rapidement les données contenues dans la tablette. Et un peu à la facebook afficher un bouton "Actualiser le contenu" lorsqu'une synchro m'indique avoir reçu de nouvelles données.
La synchronisation marche dans le sens Serveur -> Tablette. Ainsi lors d'une déconnexion du WIFI la tablette connait la liste des clients et des différentes informations en date de la dernière synchronisation.
Je bloque par contre complètement sur le fonctionnement à mettre en place pour que la tablette puisse modifier ET ajouter des données. (Synchro Tablette -> Serveur).
A la base j'étais parti dans l'idée d'ajouter une rubrique de type booléen pour indiquer les enregistrements modifiés dans les fichiers Classic. Et faire la synchro pour envoyer au serveur toutes les données floquées par cet indicateur.
Pour les modifications d'enregistrements existants cela fonctionne. Mais pas pour la création....
Par exemple sur la tablette j'ai une synchro qui m'indique que j'ai 10 commandes pour un client (C1 à C10). Je décide de créé deux commandes C11 et C12, d'ajouter les articles, etc.... Au même moment un autre employé créé une commande aussi pour le même client sur un des autres postes directement connecté au serveur. Au moment de la synchronisation de la tablette le serveur connait donc déjà une C11 (créé par le poste annexe en direct)... Et pas celle de la tablette. Je vais donc modifier la C11 par ma commande alors qu'il s'agit en fait d'une autre commande.
Je ne vois pas de solution simple à mettre en place pour parer à ce problème.... Le fait de vouloir travailler en désynchroniser devient une usine à gaz...
J'ai essayé de contourner le problème :
- En ajoutant un indicateur booléen : Enregistrement_AJOUT pour différencier les lignes modifiées des lignes ajoutées par la tablette.
- Au moment de la synchro je lance un HAJoute sans IdAuto fixé. Le serveur attribue alors lui même le prochain numéro auto. S'il est différent de celui de la tablette je met à jour les données de la tablette. Sauf que dans mon exemple, le serveur va me donner l'identifiant C12 alors que j'ai déjà un C12 locale fraichement créé = Erreur de doublon sur la tablette.....
Je parle d'identifiant C1, C10, etc... mais mes fichiers on comme clé unique un Identifiant Automatique HFSQL (chiffre sur lequel je n'ai pas la main).
Avez-vous des idées pour m'aider svp ? Merci par avance
Partager