|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre Expert
![]() ![]() |
Salut
est-il possible de faire une contrainte sur un champ d'une autre table ? j'ai la table TB_COURRIER et la table TB_ARRIVEE, dans la seconde table j'ai le champ DATE_ENREGISTREMENT alors que dans la première table j'ai le champ DATE_CORRESPONDANCE. Je veux faire une contrainte sur le champ DATE_ENREGISTREMENT qui doit être supérieur ou égale à la date renseignée dans le champ DATE_CORRESPONDANCE car un courrier peut pas être enregistré avant d'être édité ! donc j'ai fais ça : Citation:
Citation:
merci par avance.
__________________
Bon courage ou Bonne Chance (selon le contexte) |
||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Frédéric Inscription : octobre 2002 Messages : 1 722 ![]() |
Bonjour,
Non, d'ailleurs pour s'en persuader, il suffit de se poser la question comment FB retrouverait l'enregistrement correspondant de la table TB_COURRIER ? Pour faire ce genre de contrainte il faut tout simplement utiliser les triggers. |
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() ![]() |
merci pour la réponse quoique pour le 1ière partie je ne suis pas tout à fait d'accord car une clé étrangère résoudrait le problème de l'enregistrement correspondant.
donc, je vais voir coté triggers même si ça parait difficile rien qu'en lisant le nom triggers .....
__________________
Bon courage ou Bonne Chance (selon le contexte) |
|
|
00
|
|
|
#4 | ||||
|
Membre Expert
![]() Frédéric Inscription : octobre 2002 Messages : 1 722 ![]() |
Citation:
S'il y a plusieurs clés étrangères, laquelle choisir ? S'il n'y en a pas, (gérer par l'application) comment faire ? Si c'est une relation n-n quoi mettre à jour ? etc... Beaucoup de cas qui ne peuvent pas être gérés 'automatiquement' avec une règle 'simple'. De plus ca pose des problèmes plus profonds, comme : Si je supprime ma clé étrangère quid des contraintes liés ? Citation:
Un trigger peut être exécuté avant ou après une action. (une action c'est INSERT, UPDATE ou DELETE). Ici pour faire votre contrôle on va choisir de le faire AVANT INSERT et AVANT UPDATE. Dans un trigger on a accès aux anciennes et aux nouvelles valeurs de l'enregistrement à insérer ou mettre à jour. (Dans le cas d'un insert on ne se sert que des nouvelles valeurs). Pour cela il suffit de préfixer les champs par OLD. pour les anciennes valeurs et NEW. pour les nouvelles valeurs. Et pour signaler l'erreur, le plus simple est de créer une exception : Code :
CREATE EXCEPTION ERR_DATE_ARRIVE_SUP_CREATION 'Erreur, la date d''arrivée doit être plus grande ou égale à la date de création du courrier.'; Code :
|
||||
|
|
10
|
|
|
#5 |
|
Membre Expert
![]() ![]() |
merci Barbibulle pour tes explications, je vais les prendre en considération et te tenir au courant de l'état d'avancement.
__________________
Bon courage ou Bonne Chance (selon le contexte) |
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() ![]() |
Re,
le trigger marche très bien et le SGBD parait assez intelligent de cette façon mais ..... et oui j'ai toujours des mais comme je développe mon application sous delphi, je veux exploiter le trigger et remonter l'exception relevée par FB, quelqu'un a-t-il une idée ? merci par avance.
__________________
Bon courage ou Bonne Chance (selon le contexte) |
|
|
00
|
|
|
#7 | |
![]() ![]() Claude RenouleaudDéveloppeur informatique Inscription : février 2006 Messages : 4 754 ![]() |
Salut
Citation:
Si tu utilises les UIB, regarde RegisterException de TUIBDatabase. Cela te permet de gérer les exceptions à ta guise et de retourner un message personnalisé à l'utilisateur. @+ Claudius
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira. |
|
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() ![]() |
malheureusement je suis toujours à l'air des IB ! je continue à chercher mais pour le moment pas très encourageant
__________________
Bon courage ou Bonne Chance (selon le contexte) |
|
|
00
|
|
|
#9 |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 213 ![]() |
l'exception remontera toute seule
c'est juste que UIB t'aide à mieux les gérer c'est tout
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
|
00
|
|
|
#10 |
|
Membre Expert
![]() Frédéric Inscription : octobre 2002 Messages : 1 722 ![]() |
Le message de l'exception apparaitra dans une messagebox.
Tu peux aussi l'intercepter et la traiter par programme dans un bloc try except. Et en effet UIB et Fibplus permettent de centraliser la gestion des exceptions. (Ce qui est faisable aussi avec les IBX il suffit de d'intercepter au niveau de l'application des exceptions et de traiter celles qui t'intéressent). |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com