PB à toute heure et à tout moment. (à parcourir avec modération)

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-01-2013 08:40:56

eric69  
Membre Geek
Date d'inscription: 03-01-2013
Messages: 30
Pépites: 139
Banque: 0

[RESOLU] Détécter clé en double avant ou aprés enregistrement

Bonjour,

Dans une DataWindow dont la clé est saisissable (CODE), je souhaiterai afficher à l'utilisateur la valeur de la clé qui est en double en cas de saisie de doublon.
Je m'explique, actuellement c'est à l'enregistrement de la DataWindow qu'on obtiens une Exception "Duplicate Key", mais malheureusement, cela n'indique pas quel est la valeur qui est en double.
Avez vous un moyen d'obtenir cette information ou de gérer les doublons d'une manière "plus propre".

Je ne peux pas ajouter un clé auto increment. C'est le but de ma base de données d'être unique sur ce code.

Merci de votre aide.

Dernière modification par eric69 (28-01-2013 10:41:20)

Hors ligne

 

#2 25-01-2013 09:19:41

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [RESOLU] Détécter clé en double avant ou aprés enregistrement

Bonjour,

eric69 a écrit:

'on obtiens une Exception "Duplicate Key", mais malheureusement, cela n'indique pas quel est la valeur qui est en double.

tu as plusieurs clés dans ta table ?


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#3 25-01-2013 09:27:29

eric69  
Membre Geek
Date d'inscription: 03-01-2013
Messages: 30
Pépites: 139
Banque: 0

Re: [RESOLU] Détécter clé en double avant ou aprés enregistrement

Peut importe je dirais mais oui cela m'arrive que ma clé primaire soit constitué de plusieurs code.

Hors ligne

 

#4 25-01-2013 09:27:50

Geo  
Membre completement Geek
Lieu: Binche
Date d'inscription: 15-12-2008
Messages: 119
Pépites: 378
Banque: 0

Re: [RESOLU] Détécter clé en double avant ou aprés enregistrement

Bonjour,

la valeur en double, c'est celle saisie par l'utilisateur (le CODE), non ?

Tu as beaucoup de solution pour gérer ce cas et ça dépend des technologies (tout en PB natif, emploi d'un framework,...) employées pour développer.

De manière simple, tu peux toujours effectuer une recherche (SELECT CODE FROM TaTable INTO :var WHERE CODE = :CodeSaisi USING :Transaction et ensuite tester le SQLCode de la Transaction) dans l'évènement qui précède l'UPDATE (UpdateStart() ou autre si tu as un framework) et si tu trouves le CodeSaisi, c'est qu'il existe déjà en DB et alors ne pas autoriser l'UPDATE.
Tu peux aussi exploiter l'évènement DBError().


Rien ne sert de courir, il faut partir à point .

Hors ligne

 

#5 25-01-2013 09:30:22

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

Re: [RESOLU] Détécter clé en double avant ou aprés enregistrement

Salut,

tu peux par exemple à l'itemchanged du champ checker si il existe déjà dans la DB et / ou dans la DW et tu donnes une message si c'est le cas.


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

 

#6 25-01-2013 09:34:27

Geo  
Membre completement Geek
Lieu: Binche
Date d'inscription: 15-12-2008
Messages: 119
Pépites: 378
Banque: 0

Re: [RESOLU] Détécter clé en double avant ou aprés enregistrement

A l'ItemChanged() c'est un peu dangereux car la clé n'existera peut être pas à ce moment mais entre l'ItemChanged() et l'Update() (le temps de terminer la saisie et de sauver), la clé pourrait avoir été créée par un autre utilisateur.


Rien ne sert de courir, il faut partir à point .

Hors ligne

 

#7 25-01-2013 09:40:17

eric69  
Membre Geek
Date d'inscription: 03-01-2013
Messages: 30
Pépites: 139
Banque: 0

Re: [RESOLU] Détécter clé en double avant ou aprés enregistrement

En fait, je veux pas obligatoirement un truc super "sexy".
Si déjà à l'enregistrement au lieu de me dire juste qu'il y a une clé en double, il me disais qu'elle est la valeur en double ca serait bien.
Je n'ai pas de FrameWork et je suis avec une base SQL Serveur.

Sinon, oui, je pourrais parcourir dans l'update start, les lignes qui ont été modifié ou supprimé et vérifier en BDD et dans la datawindow si elle existe.
Mais j'ai un peu peur des temps de réponse.
Me contenter de dire à l'enregistrement quel est le problème (et surtout ne rien enregistrer même ce qui a marché avant) m'irait trés bien.

Hors ligne

 

#8 25-01-2013 09:44:04

xlat  
0xc0000005
Award: bf
Lieu: Tanger (طنج)
Date d'inscription: 04-12-2010
Messages: 720
Pépites: 11,343
Banque: 100,221,387,868,884,300
Site web

Re: [RESOLU] Détécter clé en double avant ou aprés enregistrement

eric69 a écrit:

En fait, je veux pas obligatoirement un truc super "sexy".
Si déjà à l'enregistrement au lieu de me dire juste qu'il y a une clé en double, il me disais qu'elle est la valeur en double ca serait bien.
Je n'ai pas de FrameWork et je suis avec une base SQL Serveur.

je te suggère de faire comme l'indiquait Geo, se surcharger l'event DBError ainsi tu as la main sur le message et tu laisses la base de données vérifier à ta place :-p.


https://lut.im/eJINqa9o/vAtyxD0h "Don't believe everything you read on the Internet"
    -- Abraham Lincoln

www.ngs.ma

Hors ligne

 

#9 25-01-2013 10:09:46

eric69  
Membre Geek
Date d'inscription: 03-01-2013
Messages: 30
Pépites: 139
Banque: 0

Re: [RESOLU] Détécter clé en double avant ou aprés enregistrement

Tu as une idée de ce que je peux mettre dans DBError ? car pour l'instant la base de données (même dans l'éditeur SQL) me jette certe mais sans me dire la clé qui pose problème
J'essai avec un collègue de mettre un Trigger avant pour envoyer une erreur plus parlante mais je ne suis pas sur que cela soit la bonne solution

Hors ligne

 

#10 25-01-2013 11:01:37

xlat  
0xc0000005
Award: bf
Lieu: Tanger (طنج)
Date d'inscription: 04-12-2010
Messages: 720
Pépites: 11,343
Banque: 100,221,387,868,884,300
Site web

Re: [RESOLU] Détécter clé en double avant ou aprés enregistrement

l'event DBError (en pb 11.5 du moins) indique entre autre "row" à la quelle l'erreur est intervenue.
Il est donc possible de gérer un ROLLBACK sur l'ensemble de l'Update et de renvoyer un message d'erreur contenant les valeurs des champs qui font partie de la clée primaire à la ligne 'row'.

On fait çà chez nous pour les valeurs "out of range".


https://lut.im/eJINqa9o/vAtyxD0h "Don't believe everything you read on the Internet"
    -- Abraham Lincoln

www.ngs.ma

Hors ligne

 

#11 25-01-2013 11:29:52

eric69  
Membre Geek
Date d'inscription: 03-01-2013
Messages: 30
Pépites: 139
Banque: 0

Re: [RESOLU] Détécter clé en double avant ou aprés enregistrement

Ok, je vais essayer, ca a l'air bien
Je me pose juste une question si la ligne est dans le tampon Filtre.
Exemple : Je saisis une ligne, je filtre ma datawindow, elle n'apparait plus à l'écran mais à l'enregistrement, elle est tout de même enregistré.

Hors ligne

 

#12 25-01-2013 11:49:07

eric69  
Membre Geek
Date d'inscription: 03-01-2013
Messages: 30
Pépites: 139
Banque: 0

Re: [RESOLU] Détécter clé en double avant ou aprés enregistrement

J'avais pas vu qu'il y avait le Buffer en parametre.
Je crois que j'ai tout ce qu'il me faut.
Merci

Hors ligne

 

#13 25-01-2013 13:07:18

eric69  
Membre Geek
Date d'inscription: 03-01-2013
Messages: 30
Pépites: 139
Banque: 0

Re: [RESOLU] Détécter clé en double avant ou aprés enregistrement

Oups, derniere petite question, avant de mettre à résolu.
Dans mon DBError de ma DW, j'affiche un message d'erreur mais il y a avant un message d'erreur qui est généré par l'Update.
J'ai essayé tous les codes retour dans le DBError mais rien ne change;
D'un coté, le message d'erreur automatique se produit avant de rentrer dans le DBError.
Vous savez comment le désactiver ? Je suis en PB 11.5

Hors ligne

 

#14 25-01-2013 13:38:36

eric69  
Membre Geek
Date d'inscription: 03-01-2013
Messages: 30
Pépites: 139
Banque: 0

Re: [RESOLU] Détécter clé en double avant ou aprés enregistrement

En fait, le return me permet bien d'éviter un 3ème message d'erreur mais je ne sais pas comment éviter le premier qui est lancé au moment de l'Update.
Quelqu'un sais comment faire ?

Hors ligne

 

#15 25-01-2013 15:13:26

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

Re: [RESOLU] Détécter clé en double avant ou aprés enregistrement

y viendrait pas d'autre par ton message d'erreur (genre itemError ptêtre) ?


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

 

#16 25-01-2013 15:33:00

xlat  
0xc0000005
Award: bf
Lieu: Tanger (طنج)
Date d'inscription: 04-12-2010
Messages: 720
Pépites: 11,343
Banque: 100,221,387,868,884,300
Site web

Re: [RESOLU] Détécter clé en double avant ou aprés enregistrement

tu as décoché "extend ancestor script" sur DBError ?


https://lut.im/eJINqa9o/vAtyxD0h "Don't believe everything you read on the Internet"
    -- Abraham Lincoln

www.ngs.ma

Hors ligne

 

#17 28-01-2013 10:40:58

eric69  
Membre Geek
Date d'inscription: 03-01-2013
Messages: 30
Pépites: 139
Banque: 0

Re: [RESOLU] Détécter clé en double avant ou aprés enregistrement

Bonjour,

Cela fonctionne, il fallait effectivement décoché "extend ancestor script".
Une fois de plus, vous avez eu réponse à tout.
Merci pour vos réponses

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22