IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Synchronisation de données et numerotation aléatoire.


Sujet :

VBA Access

  1. #1
    Membre régulier Avatar de Mike550
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2008
    Messages : 75
    Points : 102
    Points
    102
    Par défaut Synchronisation de données et numerotation aléatoire.
    Bonjour, et merci de vos conseils.

    J'ai une application Scindée en Frontale-Dorsale qui est utilisée sur des tablettes Windows 10 en mode déconnectée.
    J'aimerais pouvoir synchroniser la dorsale de chaque tablette avec la dorsale maitresse au bureau.
    avec les anciennes version de Access j'utilisais avec succès le système de synchronisation offert par Microsoft. Malheureusement le successeur de Bill ne m'a pas consulté avant de retirer cette fonctionnalité.
    Je vais donc essayer de m'en bricoler un. Et j'aimerais avoir l'avis d'experts sur la question.
    Je mettrais comme clé primaire une numérotation automatique aléatoire
    et j'ajouterais 4 champs à chaque table :
    • DateHeureCreation
    • IdSystemCreation
    • DateHeureModif
    • IDSystemModif


    Voici les étapes du programme:

    1. ajouter a la base maitresse tous les nouveaux enregistrements
    2. pour les autres remplacer l'enregistrement si la date de modification est la plus jeune.


    Ma crainte est que deux tablettes aient choisi le même numéro aléatoire. Je peux vérifier ça avec IDSystemCreation
    par contre c'est la galère pour modifier la clé primaire et les clés étrangères associées.
    La questions est la suivante:
    La numérotation aléatoire est elle assez fiable pour penser que ça puisse éliminer les risques de conflits?
    Merci de votre intérêt.
    @+ Mike

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 183
    Points : 5 515
    Points
    5 515
    Par défaut
    Bonjour,

    La fonction Now() donne une date+heure avec une précision d'environ 1 sec, soit 1 chance sur 86400 d'avoir la même valeur le même jour.

    Pour réduire cette (mal)chance, il est possible d'utiliser la valeur donnée par cette formule: CDbl(Date + Timer / 100000)
    Timer donne presque le 1/100 de seconde. (Timer <> Time)

    Vous pouvez testez cela avec le fichier joint. Allez dans le code pour tester Now / Timer / Date+Timer

    Bonne continuation.
    Fichiers attachés Fichiers attachés

  3. #3
    Membre régulier Avatar de Mike550
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2008
    Messages : 75
    Points : 102
    Points
    102
    Par défaut
    La précision d'une seconde est amplement suffisante. Mais peut-on utiliser cette valeur comme clé primaire?
    @+ Mike

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 248
    Points : 134
    Points
    134
    Par défaut
    Bonjour,
    tout dépend de la volumétrie. Mais 1 chance sur 100 000, c'est pas 0.
    Personnellement (mais vous n'avez pas l'air chaud pour ça) je jouerais sur la prise du maximum de la table principale de la base dorsale. Ensuite on incrémente les enregistrements de la base frontale avec des updates. Enfin un/des insert into de la frontale vers la dorsale. En enregistrant les consolidations dans une table avec de garder un historique.

  5. #5
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 183
    Points : 5 515
    Points
    5 515
    Par défaut
    Bien sur que l'on peut se servir de Now comme clef primaire (indexé sans doublon).
    Si par malchance, la même valeur est encodée sur plusieurs appareils, il se produira une erreur au moment de la consolidation.
    Il devrait être possible de gérer cette erreur si les enregistrements sont ramenés un à un.
    Mais entrer Now ou Date = Timer/100000, c'est pas plus compliqué!
    Bonne continuation.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Un identifiant lié au site
    C'est vrai que ça marchait pas si mal cette synchro. un peu le bazard si la base maître avait un souci quand même...
    Personnellement je met un identifiant lié aux données locales : ça demande un peu de paramétrage mais j'ai l'unicité de ma clé. Sinon pourquoi ne pas utiliser l'adresse Mac de la carte !

  7. #7
    Membre régulier Avatar de Mike550
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2008
    Messages : 75
    Points : 102
    Points
    102
    Par défaut Double clé primaire
    Merci pour vos conseils éclairants
    Pour éviter tout risque de doublons, la tentation est grande d'utiliser une clé primaire double: une auto incrémentée et l'autre le ID de la machine. Par contre pour l'avoir déjà fait, il y a une restriction mais je ne me souviens pas a quel niveau, je crois qu'il s'agissait de la synchronisation de plusieurs listes déroulantes, mais je ne suis pas sûr. Je vais donc faire des tests. je reviendrai avec mes conclusions.
    @+ Mike

Discussions similaires

  1. Synchronisation de données SQLServer 2000 -> 2005
    Par pcaboche dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 24/01/2007, 09h53
  2. Réponses: 6
    Dernier message: 18/08/2006, 10h24
  3. Synchronisation des Données avec SQL Server 2005
    Par attouchi dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 03/07/2006, 16h14
  4. [general] la synchronisation de données
    Par if_zen dans le forum Général Java
    Réponses: 7
    Dernier message: 22/05/2006, 12h28
  5. [C#] Synchronisation de donnée
    Par BoOom dans le forum Windows Forms
    Réponses: 1
    Dernier message: 11/04/2006, 11h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo