Bonjour à tous,
voilà,
j'ai tellement galéré à mettre au point ma réplication universelle,
j'ai tellement eu de mal à trouver du code sur internet,
que je voulais en faire profiter la communauté.
une bonne vidéo :
http://www.pcsoft-windev-webdev.com/.../replica1.html
La réplication s'effectue en 3 temps :
Donc 3 boutons :
1. Création du réplica maitre.
2. Création du réplica abonné.
Ces 2 premiers boutons ne sont à lancer qu'une seule et unique fois, à l'initialisation de la réplication,
ensuite on cliquera uniquement sur le bouton 3... pour toutes les autres réplications.
3. Réplication dans les 2 sens. C'est ce bouton qu'on lance à chaque fois qu'on veut synchroniser les bases.
1. Déclarations globales de la fenêtre REPLICATION :
------------------------------------------------
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 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 gsRepSauvegardeAbonne, gsRepSauvegardeMaitre,sRepSauvegarde est une chaîne sIdentifiantAbonné est une chaîne Test_copie est un booléen sIdentifiantAbonné = "Le prénom du médecin sert d'identifiant de connexion pour l'abonné" gsDonnéesMaitre = "M:\DonneesM\" // sur un serveur par exemple. gsDonneesAbonné = "C:\DonneesA\" gsRepertoireMaitre = "M:\DonneesM\rplmaitre\" gsRepertoireAbonne = "C:\DonneesA\rplabonne\" gsRepertoireTransfert = "M:\DonneesM\transfert\" sIdentifiantAbonné = INILit("LASTVALUES","util","","C:\Program files\Prog\param.INI") sRéplicaMaitre = gsRepertoireMaitre + "ReplicaMaitre.RPM" sRéplicaAbonné = gsRepertoireAbonne + "Replica_"+sIdentifiantAbonné+".RPL" // un fichier .ini permet de définir l'abonné.
2. Code Bouton-Création-Réplica-Maitre :
------------------------------------
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 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)
3. Code Bouton-Création-Réplica-Abonné :
-----------------------------------
4. Code Bouton Réplication dans les 2 sens (à chaque fois qu'on veut répliquer) :
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
61
62
63
64
65
66
67 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") HCréation(T_table 1) HCréation(T_table 2) HCréation(T_table 3) ... HCréation(T_table n) // éventuellement : HPasse("T_table i","******") // Liste complète des tables, l'ordre n'a pas d'importance car l'intégritée est sur Faux sListeTables ="T_table 1 " + RC + "T_table 2 " + RC + ... + RC + "T_table n" 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)
-------------------------------------------------------------------------------
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113 Multitâche(-100) HGèreIntégrité("*","*",hCardinalité+hEnModification+hEnSuppression,Faux) //----------------------------------------------- // création des connexions aux bases de données //----------------------------------------------- HPasse(T_table i ,"*****") Sablier(Vrai) HGèreRéplication(rplRéplicationUniverselle) HDécritConnexion("ConnexionMaitre", "", "", gsDonnéesMaitre, "", hAccèsHF7) HDécritConnexion("ConnexionAbonne", "", "", gsDonneesAbonné, "", hAccèsHF7) //-------------------------------------------------- // création réplica transportable MAITRE -> ABONNE - //-------------------------------------------------- HOuvreConnexion("ConnexionMaitre") HChangeConnexion("*", "ConnexionMaitre") SI HCréeRéplicaTransportable(sRéplicaMaitre,sIdentifiantAbonné,"") ALORS Multitâche(-500) SI fCopieFichier(gsRepertoireMaitre+RPL.Fichier,gsRepertoireTransfert+RPL.Fichier) ALORS Sablier(Faux) Info("Fichier réplica MAITRE créé et copié dans \Transfert") Multitâche(-500) FIN SINON Sablier(Faux) Erreur("Erreur lors de la creation du réplica transportable MAITRE : " + ErreurInfo()) FIN //----------------------------------------------------------- // synchronisation de l'ABONNE avec les données du MAITRE | //----------------------------------------------------------- Sablier(Vrai) HOuvreConnexion("ConnexionAbonne") HChangeConnexion("*", "ConnexionAbonne") fListeFichier(gsRepertoireTransfert+"To_"+sIdentifiantAbonné+"_*.RPA",nom_replica_maitre) sRéplicaTRansportable = gsRepertoireTransfert+sNom_replica_maitre Multitâche(20) SI fRep(sRéplicaTRansportable,frFichier) <> "" ALORS Multitâche(-500) //entier négatif pour rendre la main à windows et lui laisser le temps de faire ses trucs (copie,...) SI HSynchroniseRéplica(sRéplicaTRansportable,sRéplicaAbonné,rplVersAbonné,rplPlusRécentPrioritaire) ALORS Sablier(Faux) Multitâche(-500) SINON Sablier(Faux) Erreur("Echec de la synchro des données du maitre",ErreurInfo()) Multitâche(20) FIN SINON Sablier(Faux) Info("Aucune synchro effectuée, le Réplica Transportable n'a pas été trouvé") Multitâche(20) FIN //-------------------------------------------------- // création réplica transportable ABONNE -> MAITRE //-------------------------------------------------- Sablier(Vrai) HOuvreConnexion("ConnexionAbonne") HChangeConnexion("*", "ConnexionAbonne") SI HCréeRéplicaTransportable(sRéplicaAbonné,sIdentifiantAbonné,"") ALORS Multitâche(-500) SI fCopieFichier(gsRepertoireAbonne+RPL.Fichier,gsRepertoireTransfert+RPL.Fichier) ALORS Sablier(Faux) Info("Fichier réplica ABONNE créé et copié dans \Transfert") Multitâche(-500) FIN SINON Sablier(Faux) Erreur("Erreur lors de la creation du réplica transportable ABONNE : " + ErreurInfo()) FIN //-------------------------------------------------- // synchronisation du MAITRE avec les données de l'ABONNE //-------------------------------------------------- Sablier(Vrai) HOuvreConnexion("ConnexionMaitre") HChangeConnexion("*", "ConnexionMaitre") fListeFichier(gsRepertoireTransfert+"From_"+sIdentifiantAbonné+"_*.RPA",nom_replica_abonne) sRéplicaTRansportable = gsRepertoireTransfert+sNom_replica_abonne Multitâche(20) SI fRep(sRéplicaTRansportable,frFichier) <> "" ALORS Multitâche(-500) SI HSynchroniseRéplica(sRéplicaMaitre,sRéplicaTRansportable,rplVersMaître,rplPlusRécentPrioritaire) ALORS Sablier(Faux) Multitâche(-500) SINON Sablier(Faux) Erreur("Echec de la synchro des données de l'abonné",ErreurInfo()) Multitâche(20) FIN SINON Sablier(Faux) Info("Aucune synchro effectuée, le Réplica Transportable n'a pas été trouvé") Multitâche(20) FIN Sablier(Faux) Info("REPLICATION terminée avec succès") Ferme()
Partager