OVH Cloud OVH Cloud

Problème avec les Repliqua

11 réponses
Avatar
Oraclus
Bonjour,

J'aurais besoin d'utiliser des repliqua mais j'ai un soucis concernant la
numérotation des clef lorsque je passe en mode repliqua.

En effet j'ai une numérotation de clef auto qui est chiffré (1,2,3,4...)
pour plusieurs tables de ma base. J'utilise par ailleurs ces clefs afin
d'établir des liens entre les tables.
Or lorsque je passe en repliqua il transforme les clef en numérotation
aléatoire ce qui en plus de rendre mes liens obsolètes, ne permet pas une
utilisation fonctionnelles....

Ma question: Existe t il un moyen de créer un repliqua tout en conservant la
numérotation des clefs d'origine.

Merci d'avance

10 réponses

1 2
Avatar
J-Pierre
Bonsoir,

Ben non, ce n'est pas possible, c'est même indispensable, sinon, tous les utilisateurs qui créent des lignes dans la même
table les créeraient tous avec les mêmes numéros et la synchronisation serait impossible. Et même avec des numéros aléatoires,
MS a dû prévoir une gestion d'erreur en cas de doublons los de la synchronisation......

Le fait d'utiliser ces numéros auto dans des relations est courant mais n'implique pas qu'ils doivent être consécutifs. Tu
peux spécifier un incrément avec la propriété "nouvelles valeurs". Qu'entends-tu exactement par "rendre mes liens obsolètes" ?

J-Pierre

"Oraclus" a écrit dans le message de news:

Bonjour,

J'aurais besoin d'utiliser des repliqua mais j'ai un soucis concernant la
numérotation des clef lorsque je passe en mode repliqua.

En effet j'ai une numérotation de clef auto qui est chiffré (1,2,3,4...)
pour plusieurs tables de ma base. J'utilise par ailleurs ces clefs afin
d'établir des liens entre les tables.
Or lorsque je passe en repliqua il transforme les clef en numérotation
aléatoire ce qui en plus de rendre mes liens obsolètes, ne permet pas une
utilisation fonctionnelles....

Ma question: Existe t il un moyen de créer un repliqua tout en conservant la
numérotation des clefs d'origine.

Merci d'avance


Avatar
Oraclus

Bonsoir,

Ben non, ce n'est pas possible, c'est même indispensable, sinon, tous les utilisateurs qui créent des lignes dans la même
table les créeraient tous avec les mêmes numéros et la synchronisation serait impossible. Et même avec des numéros aléatoires,
MS a dû prévoir une gestion d'erreur en cas de doublons los de la synchronisation......

Mouaip si c'est prévu alors pourquoi ne pas l'avoir prévu avec clef

consécutives.... bref

Le fait d'utiliser ces numéros auto dans des relations est courant mais n'implique pas qu'ils doivent être consécutifs. Tu
peux spécifier un incrément avec la propriété "nouvelles valeurs". Qu'entends-tu exactement par "rendre mes liens obsolètes" ?


Je t'explique le contexte ce sera plus simple car je suis un débutant ++
sous access.
j'ai une table patients et une table professionnels.
chaque patients est en lien avec certain professionels donc j'ai dans ma
table patient des items ClefProfessionel1 ClefProfessionel2 etc...
Donc si mes clefs de ma table professionels changent, cela ne va pas pour
autant changer les entrées dans la table patients...:/

Alors bien sur je suis convaincu qu'il y aurait eu un autre myen d'obtenir
la même chose mas j'ia un peu bricolé...

merci



J-Pierre

"Oraclus" a écrit dans le message de news:

Bonjour,

J'aurais besoin d'utiliser des repliqua mais j'ai un soucis concernant la
numérotation des clef lorsque je passe en mode repliqua.

En effet j'ai une numérotation de clef auto qui est chiffré (1,2,3,4...)
pour plusieurs tables de ma base. J'utilise par ailleurs ces clefs afin
d'établir des liens entre les tables.
Or lorsque je passe en repliqua il transforme les clef en numérotation
aléatoire ce qui en plus de rendre mes liens obsolètes, ne permet pas une
utilisation fonctionnelles....

Ma question: Existe t il un moyen de créer un repliqua tout en conservant la
numérotation des clefs d'origine.

Merci d'avance







Avatar
J-Pierre
Oui, tu as un peu bricolé :-)

"Mouaip si c'est prévu alors pourquoi ne pas l'avoir prévu avec clefs consécutives.... bref"


J'explique de manière plus détaillée.

Réplica, ça veut dire que plusieurs personnes travaillent sur la même base en étant déconnectées, chacune ayant une copie de
la base sur son PC, et lorsqu'elles se connectent, les mises à jour sont répercutées sur la table "maître", je ne me souviens
pas du terme exact. Si toutes ces personnes créent par exemple un nouveau patient en étant déconnectées, tous ces patients
auront le même numéroAuto, alors qu'il s'agit de patients différents. Et lors de la synchronisation, il y aura plusieurs fois
le même numéro théoriquement unique. Impossible à gérer car erreur systématique, d'où le choix du numéro aléatoire qui permet
de réduire à une chance sur 2 milliards la probabilité d'avoir le même numéro assigné. Et même avec un pourcentage aussi
faible, Microsoft a prévu une gestion des erreurs.

De la manière dont tu as conçu ta base, le passage en réplica pose effectivement un problème. Je dirais que si tu l'avais
conçue suivant les règles habituelles, tu n'aurais même pas remarqué que les numéros auto étaient modifiés. Tu as ce qu'on
appelle une relation plusieurs à plusieurs, un patient peut être en relation avec plusieurs professionnels, ce que je ne lui
souhaite pas, et un professionnel avoir plusieurs patients, ce que je lui souhaite.

Dans ce cas, il te faut 3 tables, une "patients", une "professionnels" et une troisième qui fait le lien entre les deux.
Sommairement:
Table "patients"
numéroAuto (clé primaire)
nom patient (index)
etc............
Table "professionnels"
numéroAuto (clé primaire)
nom professionnel (index)
etc.........
Table "Liens"
numéroAuto (clé primaire)
code patient (numérique long, index non unique)
code professionnel (numérique long, index non unique)
rien d'autre sauf peut-être la date à laquelle ce lien a été créé, ça dépend de l'application.......

Après, tu définis des relations:
numéroAutoPatient->code patient, le système va automatiquement te proposer une relation un-à-plusieurs, tu coches "appliquer
l'intégrité référentielle" et "mettre à jour en cascade", tu ne coches pas "effacer en cascade".
même chose pour la relation numéroAutoProfessionnel->code professionnel.

De cette manière, lorsque tes numéroAuto seront modifiés, les codes correspondants sont aussi modifiés. Et tu ne peux pas
supprimer un patient ou un professionnel s'il a des lignes dépendantes dans la table lien. Pour supprimer un patient ou un
professionnel, il faudra d'abord aller dans la table lien et supprimer toutes les lignes dépendantes. Excellente protection
contre les suppressions sauvages.

Remarque que tes numéroAuto ne seront modifiés qu'une fois, lorsque tu passeras en réplica. Cela ne se produira pas lors de la
synchronisation, en cas de doublons, les erreurs ne sont pas traitées mais enregistrées dans une table spéciale que tu dois
traiter toi-même, je ne me rappelle pas comment, peut-être en le modifiant manuellement puis en réexécutant la
synchronisation.

Remarque aussi que dans ton cas, la valeur des numéroAuto n'a aucune importance, c'est un truc purement interne à Access pour
faciliter la vie des développeurs. Dans tes formulaires et états, tu ne feras jamais apparaître ce numéro bien qu'il soit
omniprésent. Tu ne feras jamais de tri sur ce numéro non plus. Et tu arrêteras d'en dire du mal :-)

Bon courage.
J-Pierre

"Oraclus" a écrit dans le message de news:




Bonsoir,

Ben non, ce n'est pas possible, c'est même indispensable, sinon, tous les utilisateurs qui créent des lignes dans la même
table les créeraient tous avec les mêmes numéros et la synchronisation serait impossible. Et même avec des numéros
aléatoires,
MS a dû prévoir une gestion d'erreur en cas de doublons los de la synchronisation......

Mouaip si c'est prévu alors pourquoi ne pas l'avoir prévu avec clef

consécutives.... bref

Le fait d'utiliser ces numéros auto dans des relations est courant mais n'implique pas qu'ils doivent être consécutifs. Tu
peux spécifier un incrément avec la propriété "nouvelles valeurs". Qu'entends-tu exactement par "rendre mes liens
obsolètes" ?


Je t'explique le contexte ce sera plus simple car je suis un débutant ++
sous access.
j'ai une table patients et une table professionnels.
chaque patients est en lien avec certain professionels donc j'ai dans ma
table patient des items ClefProfessionel1 ClefProfessionel2 etc...
Donc si mes clefs de ma table professionels changent, cela ne va pas pour
autant changer les entrées dans la table patients...:/

Alors bien sur je suis convaincu qu'il y aurait eu un autre myen d'obtenir
la même chose mas j'ia un peu bricolé...

merci



J-Pierre

"Oraclus" a écrit dans le message de news:

Bonjour,

J'aurais besoin d'utiliser des repliqua mais j'ai un soucis concernant la
numérotation des clef lorsque je passe en mode repliqua.

En effet j'ai une numérotation de clef auto qui est chiffré (1,2,3,4...)
pour plusieurs tables de ma base. J'utilise par ailleurs ces clefs afin
d'établir des liens entre les tables.
Or lorsque je passe en repliqua il transforme les clef en numérotation
aléatoire ce qui en plus de rendre mes liens obsolètes, ne permet pas une
utilisation fonctionnelles....

Ma question: Existe t il un moyen de créer un repliqua tout en conservant la
numérotation des clefs d'origine.

Merci d'avance









Avatar
J-Pierre
Je suis allé un peu vite, j'ai dit une connerie, pour la table "Liens", en fait, elle peut représenter les visites que les
patients font chez les professionnels, dans ce cas, tu l'appelles "Visites", et sa structure ressemble à:

Table "Visites"
numéroAuto (clé primaire)
code patient (numérique long, index non unique)
code professionnel (numérique long, index non unique)
Date/heure de la visite (index non unique)
etc.......
Avatar
Oraclus
Wow !! Effectivement ca à l'air bien comme ca. Je vais faire des tests
Mais concretement comment ca se gère dans les forumlaire??
Dans mon formulaire Patient (celui qui sert a remplir la base patient) j'ai
un onglet professionnel intervenant dans lequel jusque là je mettais les
clefs. Avec ton système comment ca marche, faut il mettre les noms a la place
??


Je suis allé un peu vite, j'ai dit une connerie, pour la table "Liens", en fait, elle peut représenter les visites que les
patients font chez les professionnels, dans ce cas, tu l'appelles "Visites", et sa structure ressemble à:

Table "Visites"
numéroAuto (clé primaire)
code patient (numérique long, index non unique)
code professionnel (numérique long, index non unique)
Date/heure de la visite (index non unique)
etc.......





Avatar
Oraclus
Bon j'ai testé at j'ai réalisé en le faisant que c'est quelquechose que j'ai
mis en place pour la gestion des appels lol ..... j'avais pas pensé à la
faire pour ca.

Toujours est il qu'il doit me manquer une connaissance technique en plus car
pour rajouter des liens dans mon formulaire patient il faut que je saisisse
la clef du professionnel et quu'ne fois que je serais passer en mode repliqua
les clefs devenant très complexe je ne sais pas comment je vais faire...

Si tu as un peu de temps j'aimerais bien que tu me fasses un exemple de base
avec les 3 tables et le formulaire qui correspond et à partir de cette base
de travail on pourra parler le même language.
En tout cas merci pour le coup de main.

Mon email (sans le NOSPAM evidemment :) )


Wow !! Effectivement ca à l'air bien comme ca. Je vais faire des tests
Mais concretement comment ca se gère dans les forumlaire??
Dans mon formulaire Patient (celui qui sert a remplir la base patient) j'ai
un onglet professionnel intervenant dans lequel jusque là je mettais les
clefs. Avec ton système comment ca marche, faut il mettre les noms a la place
??



Avatar
J-Pierre
Bonjour,

Tout d'abord, ce n'est pas mon système, toute personne connaissant Access t'aurait sans doute fait la même réponse:-)

Ton formulaire Patient se compose d'un formulaire et d'un sous-formulaire.
Dans le formulaire, tu utilises la table patient seule comme source, et comme affichage par défaut, tu mets "Formulaire
unique".
Dans le sous-formulaire, comme source, une requête avec les trois tables Patients->Visites->Professionnels dans laquelle tu
sélectionnes les lignes du patient affiché dans le formulaire, comme affichage "Formulaires continus", enfin, tu renseignes
champs pères<->champs fils.

Et tu ne fais apparaître que les noms, le choix se faisant par une liste déroulante, tu mets les numéroAuto et les codes dans
les formulaires, mais pas visibles.

Une dernière remarque: Dans cette solution, une visite = un professionnel. Dans le cas où, au cours d'une même visite, ton
patient voit plusieurs professionnels (cas normal dans les hôpitaux par exemple, ou bien si un intervenant tient le patient
pendant que l'autre le torture), ta structure de base se complique un peu (mais si tu n'aimes pas, tu peux aussi considérer
que dans ce cas-là, il s'agit en fait de plusieurs visites dans la même journée, pourquoi faire compliqué si ce n'est pas
indispensable)

Bref, tables patients et professionnels inchangées, table visites modifiée et une nouvelle table intervenants:

Table "Visites"
code patient (numérique long, index non unique)
numéroAuto (clé primaire)
Date/heure de la visite (index non unique)
etc.......
Table "Intervenants"
numéroAuto (clé primaire)
code visite(numérique long, index non unique)
code professionnel (numérique long, index non unique)
etc.......

et tes différentes relations sont:
table patients-> table visites (numéroAuto patient->code patient )
table visites->table intervenants (numéroAuto visite->code visite)
table professionnels->table intervenants (numéroAuto professionnel ->code professionnel)

Voilà voilà, au boulot
J-Pierre

"Oraclus" a écrit dans le message de news:

Wow !! Effectivement ca à l'air bien comme ca. Je vais faire des tests
Mais concretement comment ca se gère dans les forumlaire??
Dans mon formulaire Patient (celui qui sert a remplir la base patient) j'ai
un onglet professionnel intervenant dans lequel jusque là je mettais les
clefs. Avec ton système comment ca marche, faut il mettre les noms a la place
??


Je suis allé un peu vite, j'ai dit une connerie, pour la table "Liens", en fait, elle peut représenter les visites que les
patients font chez les professionnels, dans ce cas, tu l'appelles "Visites", et sa structure ressemble à:

Table "Visites"
numéroAuto (clé primaire)
code patient (numérique long, index non unique)
code professionnel (numérique long, index non unique)
Date/heure de la visite (index non unique)
etc.......







Avatar
J-Pierre
Quoi ?????????? te faire une base exemple ????????????????????

TU N'AS PAS LE BON PRENOM

Je plaisante, mais comme je viens de me fendre d'une 2ème longue réponse, regarde la d'abord, et si ça t'intéresse toujours,
je te
fais l'exemple dans la version simple (une visite = un intervenant).

J-Pierre

"Oraclus" a écrit dans le message de news:

Bon j'ai testé at j'ai réalisé en le faisant que c'est quelquechose que j'ai
mis en place pour la gestion des appels lol ..... j'avais pas pensé à la
faire pour ca.

Toujours est il qu'il doit me manquer une connaissance technique en plus car
pour rajouter des liens dans mon formulaire patient il faut que je saisisse
la clef du professionnel et quu'ne fois que je serais passer en mode repliqua
les clefs devenant très complexe je ne sais pas comment je vais faire...

Si tu as un peu de temps j'aimerais bien que tu me fasses un exemple de base
avec les 3 tables et le formulaire qui correspond et à partir de cette base
de travail on pourra parler le même language.
En tout cas merci pour le coup de main.

Mon email (sans le NOSPAM evidemment :) )


Wow !! Effectivement ca à l'air bien comme ca. Je vais faire des tests
Mais concretement comment ca se gère dans les forumlaire??
Dans mon formulaire Patient (celui qui sert a remplir la base patient) j'ai
un onglet professionnel intervenant dans lequel jusque là je mettais les
clefs. Avec ton système comment ca marche, faut il mettre les noms a la place
??






Avatar
J-Pierre
Ta base est prête, tu viens la chercher ?
J-Pierre
Avatar
Oraclus
Ou ca ?

Encore merci


Ta base est prête, tu viens la chercher ?
J-Pierre





1 2