# Environnements de dveloppement > Autres EDI > Powerbuilder >  Contrle de doublon dans une datawindow issue d'une table  deux  cls primaires

## Maman Kakal Nhmiya

Bonjour, 
J'ai cr une datawindow d'une table ayant deux cls primaires. Pour respecter chaque fois cette intgrit, je dois crire un code qui permettra de savoir si une ligne d'enregistrement est saisie, avec ses deux cls primaires, toute autre tentative d'enregistrement des mmes cls entraine un dbogage(Violation of primary keys). SVP aider moi  pouvoir faire une code qui contrlera  l'avance l'existence des deux cls primaires prcedemment enregistres.
A vous lire...

----------


## Rincevent76

Qu'entends tu exactement pas une table  2 cls primaires ?

perso je ne comprends pas bien ta demande.

----------


## maestro

Maman Kakal Nhmiya,

si tu utiliser par exemple Oracle comme base donnes et tu as cre une table avec une cl primaire compos de 2 champs alors ds que tu ajoutes un nouveau enregistrement tu peux attraper l'erreur qui se produiera lors de l'utilisatation de la mthode update()  l'aide de l'venement DbError() qui te rend le code de l'erreur et le texte d'erreur. Suite a cette erreur tu ragira.

Si tu dois controler avant de pouvoir ajouter alors fait d'abord un retrieve() puis  l'aide de la mthode find cherche si tu a dej une cl comme a avec les critres que tu saisiras  l'aide du clavier. 

OU

tu peux aussi le faire avec un dynamic SQL aulieu de faire un retrieve() et de comparer par exemple ds que l'utilisateur aura finie de tapper ou  l'aide de l'evenemnt itemchanged() ou itemfocuschanged() si la cl existe ou pas.

J'espere c'est ce que tu cherches.

----------


## Maman Kakal Nhmiya

J'utilise SQLAnyWhere 5.5 com SGBD. La table a une cl primaire constitue de deux champs. Si je fais dans l'vnment Itemfocuschanged ou Itemchanged


```

```

Aprs j'cris
Si le rsultat renvoy est =0 partout; de signaler que l'enregistrement existe dej.
Or si j'ai deja saisi une occurrence d'enregistrement
de deux champs 01/M et 02/PJ par exemple 
A la saisie de d'une occurrence suivante:
01/M et 03/LK; le mesage est toujours Cet enregsitreent existe dej. Car il a pu trouver le 01/M et 03/LK avec une autre occurrence d'enregistrement. 
Que faire SVP?

----------


## Thig

Bonjour

L'event itemchanged est dclench  la fin de la saisie d'une colonne. Il permet de valider ou non la valeur saisie. 
La valeur en cours de saisie est stocke dans le paramtre data de l'vent, mais elle n'est pas encore valider et donc pas dans la datawindow.

En utilisant ce code : 


```

```

tu ne rcupres pas la valeur en cours de saisie, mais celle existant dj dans dw.

il vaut mieux crire qlq chose du genre :


```

```

A+, Thig

----------

