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
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 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)
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
Partager