Pas de problème (pb), que du PowerBuilder (PB) ^^

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 25-10-2013 08:26:27

jordel  
Membre completement Geek
Lieu: Creil
Date d'inscription: 06-05-2011
Messages: 133
Pépites: 286
Banque: 0
Site web

[RESOLU] Erreur d'update sur une DW

Bonjour à toutes et à tous,

Bon je ne sais pas si j'ai besoin d'une perf de café ce matin ou autre... mais je bloque sur un problème tout bête.

J'ai un écran avec une DW qui reprend un DataObject connecté à une table avec 3 colonnes (avec update autorisé). Ces 3 seules colonnes formant la PK de la table.

Cette DW je la charge non pas via un retrieve de la table mais avec un importfile d'un fichier txt pour mettre à jour en masse les datas.

Par contre, dès que j'envoie un update dessus... j'ai une erreur qui me saute à la figure !

Code:

ORA-00001 : unique constraint...

Est-ce normal à votre avis ? M'y prends-je mal ?

Dernière modification par jordel (03-06-2014 14:14:27)


J'ai le bras long... et au bout de ce bras, il y a Chuck Norris !

Hors ligne

 

#2 25-10-2013 09:02:37

rincevent  
Modérateur
Award: bf
Lieu: Belgique
Date d'inscription: 06-02-2007
Messages: 722
Pépites: 100,002,023
Banque: 0

Re: [RESOLU] Erreur d'update sur une DW

Salut,

apparament tu as des doublons au niveau de ta PK donc forcément la DB refuse, vérifie tes données dans ton fichier et dans ta table et élimine les doublons et ça devrait aller


http://img114.imageshack.us/img114/8519/userbar175801nb.gif
Pourquoi ne puis-je vivre comme n'importe quel être humain ? Pourquoi mon destin est-il de ne pouvoir cesser de me battre ?

Hors ligne

 

#3 25-10-2013 09:06:26

_francois_  
Bienfaiteur du site
Lieu: TOULOUSE
Date d'inscription: 25-03-2010
Messages: 151
Pépites: 178,983,268,111
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Erreur d'update sur une DW

bonjour

tu fais un importfile pour mettre à jour des données existantes dans la base ?
si c'est le cas il faut que tu changes tes itemstatus au niveau de toutes tes lignes
après l'importFile ils seront en NewModified! ce qui va provoquer un INSERT alors que tu veux un UPDATE
Il faut donc faire un setItemStatus vers DataModified! sur chaque ligne

Edit:
sauf que si tu n'as que trois colonnes et que ces trois colonnes sont la PK ça ne va pas convenir, mon cerveau a aussi besoin de se réveiller
au départ j'étais parti sur un histoire de doublon dans ton fichier puis je me suis égaré sur le mettre à jour en masse...

Dernière modification par _francois_ (25-10-2013 09:13:12)

Hors ligne

 

#4 25-10-2013 09:11:23

jordel  
Membre completement Geek
Lieu: Creil
Date d'inscription: 06-05-2011
Messages: 133
Pépites: 286
Banque: 0
Site web

Re: [RESOLU] Erreur d'update sur une DW

J'viens de piger le truc qui bloque en fait...
Mon importfile... reprend toutes les datas de la table avec certaines lignes modifiées (400/500 sur les 19000).

Apparemment, la DW ne fait pas le lien entre les datas de mon importfile et l'existant en base... et essaie donc d'ajouter les éléments au lieu de mettre à jour l'existant automatiquement...

Mon esprit est trop tordu pour les DW apparemment ^^

J'vais passer par une boucle de mise à jour des lignes une à une.


J'ai le bras long... et au bout de ce bras, il y a Chuck Norris !

Hors ligne

 

#5 25-10-2013 09:26:41

jordel  
Membre completement Geek
Lieu: Creil
Date d'inscription: 06-05-2011
Messages: 133
Pépites: 286
Banque: 0
Site web

Re: [RESOLU] Erreur d'update sur une DW

_francois_ a écrit:

bonjour

tu fais un importfile pour mettre à jour des données existantes dans la base ?
si c'est le cas il faut que tu changes tes itemstatus au niveau de toutes tes lignes
après l'importFile ils seront en NewModified! ce qui va provoquer un INSERT alors que tu veux un UPDATE
Il faut donc faire un setItemStatus vers DataModified! sur chaque ligne

Edit:
sauf que si tu n'as que trois colonnes et que ces trois colonnes sont la PK ça ne va pas convenir, mon cerveau a aussi besoin de se réveiller
au départ j'étais parti sur un histoire de doublon dans ton fichier puis je me suis égaré sur le mettre à jour en masse...

En effet, cela fonctionne sur une autre table où j'ai 1 colonne quelconque (id du pays) à mettre à jour.

Et oui... cela ne fait rien sur la table avec les 3 colonnes en PK... mais aucune erreur tout de même !


J'ai le bras long... et au bout de ce bras, il y a Chuck Norris !

Hors ligne

 

#6 29-10-2013 10:54:52

Yanis  
Modérateur
Lieu: paris
Date d'inscription: 16-06-2010
Messages: 349
Pépites: 665
Banque: 150

Re: [RESOLU] Erreur d'update sur une DW

Salut,

   Tu as aussi une autre solution.
   Tu déclenche l'update  de ta datawindow dans lequel tu as fait l'import et dans l'evt SQPPREVIEW tu effectues un select dans la base pour savoir si l'enregistrement existe.
    Si Oui tu fais un RETURN 2 celà a pour effet de ne pas lancer l'instruction INSERT courante et de passser à la ligne suivante.
    Sinon tu laisse passer. 

   Dans l'evt SQLPREVIEW tu as le numéro de ligne en cours d'insertion dans ton cas ainsi tu peut effectuer des getitem.... pour ton select  .

Cdt
YANIS

Hors ligne

 

#7 26-05-2014 14:37:20

vdb's92270  
Membre Geek
Lieu: BOIS COLOMBES
Date d'inscription: 13-06-2009
Messages: 27
Pépites: 85
Banque: 0

Re: [RESOLU] Erreur d'update sur une DW

Bonjour,
Ma réponse serait la suivante, elle pourrait être utile mais il faut l'améliorer.
la datawindow ou le datastore, on doit avoir "delete then insert" de coché.
si il n'y pas d'identity ou de séquenceur, alors si des contraintes existes, il faut les désactiver par un sql excute immediate.

soit les colonnes suivantes : col_1, col_2, col_3
Après un importfile, effectuer un tri ascendant, puis effectuer un filtre afin d'éviter des soucis.
le sort : col_1 ASC, col_2 ASC, col_3 ASC
le filtre : getrow() > 1 and ( (col_1=col_1[-1]) and (col_2=col_2[-1]) and (col_3=col_3[-1]) )

lancer l'update
remettre les contraintes s'il y en avait.
Cela devrait fonctionner.

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22