Bonjour à tous,
Décidément, l'apprentissage de Forms n'est pas un long fleuve tranquille.
J'explique mon problème. J'ai un bloc de données qui est lié à une table et qui comporte 6 champs (2 champs qui font partie de la clé de la table mais qui ne sont pas apparents, 2 champs qui font aussi partie de la table et qui sont apparents, et enfin 2 champs qui ne sont pas des champs de la table). La table liée a donc 4 champs.
Le bloc de données est affiché sur un canevas, en 12 lignes à la fois.
ça donne ça :
085200 085300 085500 452000
Le code spécialité 1 et le code spécialité 2 sont basés, les deux libellés ne le sont pas.
Je souhaiterais pouvoir après avoir ajouté une ligne de spécialités pouvoir comparer avec les lignes déjà saisies ou déjà existantes. (donc si on vient d'ouvrir la fenêtre, et que les données viennent d'être chargées depuis la table, ou tout simplement si je viens de saisir les lignes)
Et en gros, mes contrôles se résument à ces règles :
Si j'ai :
085200 085300
Je ne peux pas avoir :
085200 085300 085300 085200
J'ai essayé de mettre dans mon WHEN-VALIDATE-RECORD un script du genre :
Mais les lectures de bloc dans un trigger WHEN-VALIDATE-RECORD, ce n'est pas possible. Et en tout cas, ça ne fonctionne pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 v_cod_spe1 := NAME_IN('SPE.COD_SPE1'); v_cod_spe2 := NAME_IN('SPE.COD_SPE2'); -- Positionnement sur le premier enregistrement First_Record; -- Tant qu'il reste des enregistrements à parcourir WHILE Name_In ( 'SYSTEM.Last_Record' ) = 'FALSE' LOOP Next_Record; IF (v_cod_spe1 = NAME_IN('SPE.COD_SPE1') AND v_cod_spe2 = NAME_IN('SPE.COD_SPE2')) OR (v_cod_spe1 = NAME_IN('SPE.COD_SPE2') AND v_cod_spe2 = NAME_IN('SPE.COD_SPE1')) THEN MESSAGE('Les lignes sont identiques !!! '); PAUSE; END IF; END LOOP; -- Re-positionnement sur la première ligne First_Record;
Quelqu'un aurait une idée ?
Michel
Partager