PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → [WD14] Pb réplication avec SQL Server si clé uniqueidentifier
[WD14] Pb réplication avec SQL Server si clé uniqueidentifier
Iniciado por dominique.ferrand, 09,abr. 2009 02:30 - 3 respuestas
Publicado el 09,abril 2009 - 02:30
Bonjour,
j'ai besoin de mettre en place une réplication entre une base centrale existante au format SQL Server et une application windev qui doit attaquer une base locale HF en mode déconnecté.

J'utilise la réplication universelle. Je galère pour la mise en place. Je pense avoir isolé le problème qui réside dans l'utilisation du type de clé primaire utilisé : 'uniqueidentifier'.

En effet, quand je synchronise avec une table dont la clé unique est numérique tout fonctionne correctement.

Si je synchronise avec une table dont la clé unique est de type 'uniqueidentifier' (ça donne des clé du type d1988cc1-132f-41c2-bdc2-c243fa498d2e) les données passent bien dans le sens SQL -> HF (1ère synchro d'initialisation et mises à jour suivantes), mais si je modifie en HF et que je synchronise de nouveau, je vais avoir un message d'erreur à ralonge (copier ci-après...)

Je n'ai trouvé que 2 posts sur ce sujet (en 2004 et 2006) et sans réponses. Je suis surpris... Personne n'utilise SQL Server ? ou pas avec ce type de clés ?

La question suivante sera : quid de la création de nouveaux enregistrements dans la base HF pour donner des valeurs à cette clé unique....


------------------------------------------------------
Erreur pendant la synchronisation du réplica.
Erreur d'intégrité lors de l'ajout/modification dans le fichier <P_TECH>.
Erreur (intégrité) de l'accès OLE DB.
Numéro d'erreur = 170159
[...]
ump de l'erreur du module <WD140HF.DLL> <14.00Exb>.

- Niveau : erreur non fatale (EL_ONRETURN)

- Code erreur : 70015

- Code erreur WD55 : 15

- Pas de code d'erreur système

- Message d'erreur système :
Description = Violation de la contrainte PRIMARY KEY 'ID_TECHNICIEN_P_TECH'. Impossible d'insérer une clé en double dans l'objet 'P_TECH'.
Source = Microsoft OLE DB Provider for SQL Server
SQL State = 23000

-------------------------------------------------------------
Je précise bien que je suis en modification d'un enregistrement existant, pas en ajout.
De plus j'ai bien créé et mis à jour la rubrique de type DateHeure pour la synchro et précisé cette rubrique dans la description de la réplication.
Publicado el 09,abril 2009 - 17:14
Bonjour Dominique...

je ne sais pas pour la réplication, mais les clés en questions sont des
GUID (globally unique identifier) que tu peux générer par des API.

Cordialement

--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

Plus d'information sur http://fabriceharari.com/index_FR.html


Dominique Ferrand wrote:
Bonjour,
j'ai besoin de mettre en place une réplication entre une base centrale existante au format SQL Server et une application windev qui doit attaquer une base locale HF en mode déconnecté.

J'utilise la réplication universelle. Je galère pour la mise en place. Je pense avoir isolé le problème qui réside dans l'utilisation du type de clé primaire utilisé : 'uniqueidentifier'.

En effet, quand je synchronise avec une table dont la clé unique est numérique tout fonctionne correctement.

Si je synchronise avec une table dont la clé unique est de type 'uniqueidentifier' (ça donne des clé du type d1988cc1-132f-41c2-bdc2-c243fa498d2e) les données passent bien dans le sens SQL -> HF (1ère synchro d'initialisation et mises à jour suivantes), mais si je modifie en HF et que je synchronise de nouveau, je vais avoir un message d'erreur à ralonge (copier ci-après...)

Je n'ai trouvé que 2 posts sur ce sujet (en 2004 et 2006) et sans réponses. Je suis surpris... Personne n'utilise SQL Server ? ou pas avec ce type de clés ?

La question suivante sera : quid de la création de nouveaux enregistrements dans la base HF pour donner des valeurs à cette clé unique....


------------------------------------------------------
Erreur pendant la synchronisation du réplica.
Erreur d'intégrité lors de l'ajout/modification dans le fichier <P_TECH>.
Erreur (intégrité) de l'accès OLE DB.
Numéro d'erreur = 170159
[...]
ump de l'erreur du module <WD140HF.DLL> <14.00Exb>.

- Niveau : erreur non fatale (EL_ONRETURN)

- Code erreur : 70015

- Code erreur WD55 : 15

- Pas de code d'erreur système

- Message d'erreur système :
Description = Violation de la contrainte PRIMARY KEY 'ID_TECHNICIEN_P_TECH'. Impossible d'insérer une clé en double dans l'objet 'P_TECH'.
Source = Microsoft OLE DB Provider for SQL Server
SQL State = 23000

-------------------------------------------------------------
Je précise bien que je suis en modification d'un enregistrement existant, pas en ajout.
De plus j'ai bien créé et mis à jour la rubrique de type DateHeure pour la synchro et précisé cette rubrique dans la description de la réplication.


Publicado el 09,abril 2009 - 19:33
Merci pour l'information - j'ai pu la mettre en oeuvre pour les ajouts.

Dans l'état actuel de mes recherches :
- les créations et modifications réalisées sur le SQL server sont bien répliquées vers la base HyperFile
- les créations réaliées sur la base HyperFile remontent bien sur SQL Server (grace à l'info de Fabrice)

Le problème restant est que la modification d'un enregistrement réalisé sur la base HF ne remonte pas sur SQL Server malgré l'information DateHeure convenablement renseignée. Dans le meilleur des cas il ne se passe rien ; dans le pire des cas, il essaie de créer un doublon sur la clé contenant le GUID...

D'autres idées ?


Dominique Ferrand


Fabrice Harari a écrit dans le message de news <49ddf3aa$1@news.pcsoft.fr> :
Bonjour Dominique...

je ne sais pas pour la réplication, mais les clés en questions sont des
GUID (globally unique identifier) que tu peux générer par des API.

Cordialement
Miembro registrado
44 mensajes
Publicado el 19,febrero 2020 - 14:05
Bonjour Dominique
Je suis dans la même galère que toi ... sauf que j'ai une base Postgres au lieu d'une base SQL Server
Mes identifiant son du type UUID exemple : 3150b11e-516c-11ea-a74b-4bca004b552d

Quand l'initialise la première fois, je n'ai qu'une seule ligne qui se crée et l'identifiant côté HFSQL Classic est à 0000000000
J'ai utilise ReplicEdit pour créer mon fichier wer et comme toi 'ai bien créé et mis à jour la rubrique de type DateHeure pour la synchro et précisé cette rubrique dans la description de la réplication.
peux tu me montrer ton code d'initialisation de la réplication ?
Merci