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

WinDev Discussion :

Réplication et synchronisation


Sujet :

WinDev

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur indépendant
    Inscrit en
    Mai 2002
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur indépendant

    Informations forums :
    Inscription : Mai 2002
    Messages : 231
    Points : 116
    Points
    116
    Par défaut Réplication et synchronisation
    Bonjour à tous,

    J'ai un souci de mise en œuvre de réplication / Synchronisation.
    J'ai fouillé sur internet , j'ai regardé l'exemple WD Replication universelle
    Ma base dispose d'un identifiant unique sur 8 octets et j'ai même ajouté un timestamp dans ma base

    J'ai regardé l'exemple mis en place sur developpez.com

    Réplication universelle http://www.developpez.net/forums/d54...ses-hyperfile/

    Voila mon problème
    J'ai fait un programme qui génère le RPM et le RPL
    Je duplique ensuite ce répertoire pour faire des tests de réplication.
    A partir du premier programme , je fais des saisies puis je génère le fichier WDZ.

    Ensuite j'essaye de synchroniser dans le deuxième répertoire avec le programme mais il n'y as aucune mise à jour ni synchronisation.

    Détail du code largement repris de l'exemple présenté sur le site

    Déclarations générales
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    sNom_replica_maitre,sNom_replica_abonne est une chaîne
    sRéplicaMaitre,gsRepertoireMaitre	est une chaîne
    sRéplicaAbonné,gsRepertoireAbonne	est une chaîne
    sRéplicaTRansportable,gsRepertoireTransfert	est une chaîne
    gsDonnéesMaitre, gsDonneesAbonné est une chaîne
    sIdentifiantAbonné est une chaîne
    Test_copie est un booléen
     
    sIdentifiantAbonné = "Abonne_1"
     
    gsDonnéesMaitre = fRepExe() + "\Replication\DonneesM\"
    gsDonneesAbonné = fRepExe() + "\Replication\DonneesA\"
     
    gsRepertoireMaitre = fRepExe() + "\Replication\Maitre\"
    gsRepertoireAbonne = fRepExe + "\Replication\Abonne\"
    gsRepertoireTransfert = fRepExe() +  "\Replication\Transfert\"
     
    sRéplicaMaitre = gsRepertoireMaitre + "ReplicaMaitre.RPM"
    sRéplicaAbonné = gsRepertoireAbonne + "Replica_"+sIdentifiantAbonné+".RPL" // un fichier .ini permet de définir l'abonné.
     
    fRepCrée(gsDonneesAbonné)
    fRepCrée(gsRepertoireAbonne)
     
    fRepCrée(gsDonnéesMaitre)
    fRepCrée(gsRepertoireMaitre)
     
    fRepCrée(gsRepertoireTransfert)

    Premier bouton pour créer le RPM
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Multitâche(20)
    Sablier(Vrai)
    HGèreIntégrité("*","*",hCardinalité+hEnModification+hEnSuppression,Faux)
    //-----------------------------------------------
    // création des connexions aux bases de données
    //-----------------------------------------------
    HGèreRéplication(rplRéplicationUniverselle)
    HDécritConnexion("ConnexionMaitre", "", "", gsDonnéesMaitre, "", hAccèsHF7)
    HDécritConnexion("ConnexionAbonne", "", "", gsDonneesAbonné, "", hAccèsHF7)
     
    //-----------------------------------------------
    // création du réplica maitre
    //-----------------------------------------------
    HOuvreConnexion("ConnexionMaitre")
    HChangeConnexion("*","ConnexionMaitre")
    HCréeRéplicaMaître(gsRepertoireMaitre)
     
    Sablier(Faux)
    Deuxième bouton pour créer le RPL de l'abonné
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    sListeTables est une chaîne
     
    Multitâche(20)
    Sablier(Vrai)
    HGèreIntégrité("*","*",hCardinalité+hEnModification+hEnSuppression,Faux)
    // on se fout de l'ordre des tables
     
    //-----------------------------------------------
    // création des connexions aux bases de données	-
    //-----------------------------------------------
    HGèreRéplication(rplRéplicationUniverselle)
    HDécritConnexion("ConnexionMaitre", "", "", gsDonnéesMaitre, "", hAccèsHF7)
    HDécritConnexion("ConnexionAbonne", "", "", gsDonneesAbonné, "", hAccèsHF7)
     
     
    //-----------------------------------------------
    // création du réplica abonné					-
    //-----------------------------------------------
    HOuvreConnexion("ConnexionAbonne")
    HChangeConnexion("*","ConnexionAbonne")
     
     
    // Liste complète des tables, l'ordre n'a pas d'importance car l'intégritée est sur Faux
     
    sListeTables ="Test"
     
    Multitâche(20)
     
    HCréeRéplicaAbonné(gsRepertoireMaitre,gsRepertoireAbonne,sIdentifiantAbonné,0,sListeTables)
     
    Multitâche(-500)
     
    //***************************************************************************************
    // PREMIERE SYNCHRO																		*
    // créer réplica Transportable à partir du maître pour stocker les données sur l'abonné	*
    // puis synchro																			*
    //***************************************************************************************
    HOuvreConnexion("ConnexionMaitre")
    HChangeConnexion("*", "ConnexionMaitre")	
    SI HCréeRéplicaTransportable(sRéplicaMaitre,sIdentifiantAbonné,"") ALORS
     
    	HOuvreConnexion("ConnexionAbonne")
    	HChangeConnexion("*", "ConnexionAbonne")	
    	sRéplicaTRansportable = gsRepertoireMaitre + RPL.Fichier
     
    	// synchronisation du réplica
    	SI HSynchroniseRéplica(sRéplicaTRansportable, sRéplicaAbonné,rplVersAbonné) ALORS
    		Multitâche(-500)		
    		// Suppression du réplica transportable qui ne sera plus utilisé
    		fSupprime(sRéplicaTRansportable)
     
    	SINON
    		FinProgramme("Echec de synchronisation.", ErreurInfo())
    	FIN
    SINON 
    	Erreur("Echec de création du premier réplica Transportable",ErreurInfo())
     
    FIN
    Sablier(Faux)


    Bouton pour créer le WDZ du maitre vers l'abonné
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    HCréeRéplicaTransportable(sRéplicaMaitre,sIdentifiantAbonné,"d:\test.wdz")

    Bouton pour récupérer du maitre pour l'abonné
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    nom_fichier est une chaîne 
    nom_fichier = fSélecteur("", "*.wdz","Sélectionner un fichier","Fichier WDZ (*.WDZ)" + TAB + "*.wdz" + RC + "Tous" + TAB + "*.*", "wdz")
     
    HSynchroniseRéplica(sRéplicaMaitre,nom_fichier,rplVersAbonné,rplPlusRécentPrioritaire)

    Mon fichier test contient un Identifiant unique automatique sur 8 octets , j'ai ajouté ensuite un timestamp en clé unique mais toujours pas d'intégration.

    Le fichier Test.wdz contient les fichiers de journalidentification , journaloperation , replicatransportable, testjnl

    Merci de vos conseils

    Philippe

  2. #2
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    Octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 139
    Points : 4 681
    Points
    4 681
    Billets dans le blog
    22
    Par défaut
    Bonjour

    Je n'ai jamais mis en place cette possibilité de WinDev, en regardant ton poste, ton code et l'aide en ligne, j'ai juste eu une interrogation sur une ligne de code de la partie "Premier bouton pour créer le RPM"

    et la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HGèreRéplication(rplRéplicationUniverselle)
    je l'aurai positionner après les lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    HOuvreConnexion("ConnexionMaitre")
    HChangeConnexion("*","ConnexionMaitre")
    ------------------------------------------------------------------------------------------------------------------------------------------
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
    ------------------------------------------------------------------------------------------------------------------------------------------
    Site perso : Formation, Expérience, Réalisations, ...
    Blog : Le Blog de DSR57 - Programmation WinDev

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur indépendant
    Inscrit en
    Mai 2002
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur indépendant

    Informations forums :
    Inscription : Mai 2002
    Messages : 231
    Points : 116
    Points
    116
    Par défaut
    J'ai pris ce code ici http://www.developpez.net/forums/d54...ses-hyperfile/

    Le fait de mettre en place la réplication universelle me semble bien placé après j'ouvre les connexions pour créer les RPM et RPL.

    J'ai avancé dans la soirée , en lisant les fichiers de journalisation on trouve toutes les informations des modifications avec 3 codes possibles
    Code 0 = Création d'un enregistrement
    Code 5 = Contenu enregistrement avant modification
    Code 16 = Enregistrement après modification

    Bien le fichier contient les informations des dates et heures de mises à jour.
    Il est certain que la gestion de la synchronisation pour chaque fichier serait très lourde à mettre en œuvre.
    J'ai inclus un fichier de test avec un site et un horodatage comme clé unique.
    La mise à jour serait facile et gérable par programmation si le nombre de fichiers est faible et pas trop de volume.

    Je ne comprend pas comment fonctionne cette synchronisation avec les WDZ

    Philippe

Discussions similaires

  1. Réplication fusion : synchronisation abonné hors d'un domaine
    Par shyangel dans le forum Réplications
    Réponses: 2
    Dernier message: 10/03/2012, 17h47
  2. Réplication / Synchronisation base mutualisé
    Par grabriel dans le forum Installation
    Réponses: 4
    Dernier message: 09/03/2008, 03h42
  3. Synchronisation / réplication de bases
    Par Expert_PHP dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 30/06/2006, 02h50
  4. Réplication et Synchronisation
    Par Mouse dans le forum Réplications
    Réponses: 3
    Dernier message: 17/08/2005, 17h50
  5. Réplication et Synchronisation
    Par Mouse dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 17/08/2005, 17h50

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