Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Outils > Forms
Forms Forum d'entraide sur Oracle Forms
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/07/2007, 19h13   #1
Invité de passage
 
Inscription : juillet 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 7
Points : 2
Points : 2
Par défaut Modifier la saisie d'un item en fonction des enregistrements précédents.

Bonjour,
Je dois créer une forms (10g) pour gérer des formes (un rectangle par ex) avec leur dimentions X et Y...
Mais comme rien n'est simple ces formes peuvent être tournées avec les valeurs de rotations suivantes : 0°, 90°, 180° ou 270°...

J'ai donc créé les 3 tables suivantes :
- Forme (Frm_Id, X, Y),
- Rotation (Rotation, Inverser_XY)
- Forme_Rota(Frm_Id,Rotation)
Et les 2 clefs étrangères sur Forme_Rota nécessaires...

Mon module contient 2 blocs "Forme" et "Forme_Rota" avec la relation maître-détail pour gérer tout cela...
Le bloc "Forme_Rota" est multi-ligne (4 enregistrements affichés)...

Je voudrais que pour chaque forme la première rotation saisie soit obligatoirement 0°, puis ne plus proposer les rotations déjà choisies (j'utilise une LOV pour récupérer les 4 rotations de la table "Rotation") .

Je voudrais également récupérer automatiquement les dimentions saisies dans la ligne 0° et les inverser pour les rotations qui ont "Inverser_XY" à vrai...

Mon problème est le suivant :
Je vois comment récupérer les valeurs contenues dans les tables et modifier les champs lors de la saisie de la nouvelle rotation (en utilisant le trigger "WHEN-VALIDATE-ITEM" sur l'item "Rotation" du bloc "Forme_Rota"),
mais je suis coincé si l'utilisateur renseigne plusieurs rotations différentes avant de faire un "COMMIT.
Je pensais balayer l'ensemble des lignes pour récupérer les valeurs des lignes précédentes mais les fonctions "FIRST_RECORD" et "NEXT_RECORD" sont interdites dans les triggers de validation !

D'avance un grand merci aux courageux qui m'auront lu jusqu'au bout (je sais c'est long!) et à tous ceux qui voudront bien me répondre....
meninblues est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/07/2007, 09h22   #2
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 450
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 450
Points : 4 209
Points : 4 209
Pour vérifier "en live" des données de lignes différentes, il faut faire une Colonne Formula.
La formule appelle une fonction.
Au when-validate-item, tu positionne un paramètre à la valeur de ton champ
exemple :parameter.p_rota := :forme_rota.rotation;

La fonction fait juste un
Code :
IF :forme_rota.rotation = :parameter.p_rota THEN RETURN 1 else RETURN 0; END IF;
Une dernière colonne à créer sur ton bloc qui fait la somme de la colonne formula.

Dans le WVI, tu testes la valeur de cette colonne summary.
le WVI devient
Code :
1
2
:parameter.p_rota := :forme_rota.rotation;
IF :forme_rota.summary_colonne > 1 THEN RAISE ... END IF;
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 14h50   #3
Invité de passage
 
Inscription : juillet 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 7
Points : 2
Points : 2
Merci McM, cela devrai me permettre de ne valider que des codes inexistant...


Par contre sais tu s'il y a un moyen de restreindre les rotations proposées par la LOV associée pour en exclure les rotations déjà choisies?

Merci
meninblues est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 15h18   #4
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 450
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 450
Points : 4 209
Points : 4 209
Je n'ai jamais essayé.
Peut être en mémorisant les rotations déjà renseignées dans des variables et en faisant un MINUS

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
WITH rota AS (
	SELECT '0' deg FROM dual UNION ALL
	SELECT '90' deg FROM dual UNION ALL
	SELECT '180' deg FROM dual UNION ALL
	SELECT '270' deg FROM dual )
SELECT *
FROM rota
MINUS 
SELECT :param1 FROM dual
MINUS 
SELECT :param2 FROM dual
MINUS 
SELECT :param3 FROM dual
MINUS 
SELECT :param4 FROM dual
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2007, 10h51   #5
Invité de passage
 
Inscription : juillet 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 7
Points : 2
Points : 2
Cela pourrait marcher...
Je programmais avant avec un autre langage qui transcrivait directement chaque opération dans la base, et j'avoue que j'ai gardé certains reflexes dans ma façon de concevoir une application...
En tous cas je te remercie.
meninblues est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h55.


 
 
 
 
Partenaires

Hébergement Web