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 10/08/2011, 12h40   #1
Membre du Club
 
Inscription : novembre 2007
Messages : 226
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 226
Points : 66
Points : 66
Par défaut Block n'est pas vide

Bonjour,

Comment je peux tester qu'un block doit contenir au moins un enregistrement?

Merci pour vos propositions.
tunis71187 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 14h40   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Tu peux t'inspirer de ceci pour compter les enregistrements :
http://www.dbforums.com/oracle/10311...ata-block.html
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 14h53   #3
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 529
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 529
Points : 6 458
Points : 6 458
Attention, un block contient TOUJOURS au moins un enregistrement, mais ce n'est pas pour autant qu'il est renseigné...
Il vaut mieux tester si un ou plusieurs champs obligatoires ont une valeur non nulle.
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 09h35   #4
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
Ou tester 'SYSTEM.BLOCK_STATUS' (='NEW')

Ou tester :SYSTEM.RECORD_STATUS SUR LE premier enregistrement ('NEW' )
EDIT : J'ai peut être mal compris la question ? Qu'entends-tu par "doit contenir au moins un enregistremen?" ? Qu'il faut que l'utilisateur renseigne au moins un enregistrement ?
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 10h22   #5
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Il doit même y avoir une propriété sur le block pour ça non ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 10h42   #6
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 529
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 529
Points : 6 458
Points : 6 458
Documentation Forms
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 17h14   #7
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
je pensais aux options dans les propriétés du bloc en fait
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 13h56   #8
Membre du Club
 
Inscription : novembre 2007
Messages : 226
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 226
Points : 66
Points : 66
Bonjour,

Garuda: je veux dire qu'il faut un enregistrement fils pour un bloc maitre càd il ne faut pas autoriser l'enregistrement d'une donnée du bloc maitre sans avoir de détails.

Pour cela, je suis bloqué dans la situation de bloquer l'utilisateur de ne pas enregistrer des données maitres sans détails.

J'ai essayé avec la proposition de Mr.Orafrance, c'est une bonne idée mais je ne trouve pas l'emplacement idéale pour le code pour faire le blocage.

Un DBA me propose d'utiliser un déclencheur, mais je suis débutant et je n'ai aucune idée de traduire ça.

Merci.
tunis71187 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/08/2011, 13h15   #9
Membre du Club
 
Inscription : novembre 2007
Messages : 226
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 226
Points : 66
Points : 66
Bonjour,

J'ai essayé avec les commandes et mais je ne trouve pas la solution désirée. Est il possible de me donner un exemple.

Merci
tunis71187 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 09h24   #10
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 529
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 529
Points : 6 458
Points : 6 458
Vous avez essayé quoi ? donnez votre code
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 13h42   #11
Membre du Club
 
nancy carina
Inscription : décembre 2010
Messages : 34
Détails du profil
Informations personnelles :
Nom : nancy carina

Informations forums :
Inscription : décembre 2010
Messages : 34
Points : 45
Points : 45
tu peux utiliser un déclencheur WHEN-VALIDATE-RECORD
nancy_carina est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 13h54   #12
Membre du Club
 
nancy carina
Inscription : décembre 2010
Messages : 34
Détails du profil
Informations personnelles :
Nom : nancy carina

Informations forums :
Inscription : décembre 2010
Messages : 34
Points : 45
Points : 45
par exemple
Code :
1
2
3
4
IF :champ_detail IS NULL THEN
AL_MESSAGE('vous devez saisir au moins un enregistrement') ;
RAISE RORM_TRIGGER_FAILLURE;
END IF ;
nancy_carina est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 14h30   #13
Membre du Club
 
Inscription : novembre 2007
Messages : 226
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 226
Points : 66
Points : 66
Bonjour,

Merci Nancy pour votre proposition.

J'ai utilisé le code :
Code :
1
2
3
4
	IF :champdetail IS NULL THEN
MESSAGE('vous devez saisir au moins un enregistrement') ;
RAISE FORM_TRIGGER_FAILURE;
end IF;
dans le déclencheur PRE-INSERT du block maitre et ça marche à condition que le curseur soit pointé dans une enregistrement pas dans le prochain enregistrement qui est vide.
mais dans le déclencheur PRE-DELETE au niveau du block détails ça n'empêche plus de vider le block et l'enregistrement réussit donc ce n'est pas préférable dans ce cas.

M. Yerbouti, j'ai essayé avec ce code:
Code :
1
2
3
4
IF :SYSTEM.BLOCK_STATUS='NEW' then
message('il faut au moins un enregistrement');
raise form_trigger_failure;
end IF;
de même pour la commande :system.record_status mais pas d'effet.
D'une autre façon je ne veux pas enregistrer un enregistrement maitre sans au moins un détail.
Merci.
tunis71187 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 14h39   #14
Membre expérimenté
 
Homme Mohamed Houri
Inscription : mars 2010
Messages : 286
Détails du profil
Informations personnelles :
Nom : Homme Mohamed Houri
Localisation : France

Informations forums :
Inscription : mars 2010
Messages : 286
Points : 563
Points : 563
Citation:
Envoyé par tunis71187 Voir le message
Bonjour,

Garuda: je veux dire qu'il faut un enregistrement fils pour un bloc maitre càd il ne faut pas autoriser l'enregistrement d'une donnée du bloc maitre sans avoir de détails.

Merci.
Je ne vois pas comment vous pourriez le faire sans trigger
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
 
mhouri.world > CREATE TABLE parent (id number PRIMARY KEY, child_cnt number DEFAULT 0 NOT NULL);
 
TABLE created.
 
mhouri.world > ALTER TABLE parent ADD constraint check_cnt CHECK (child_cnt > 0) deferrable initially deferred;
 
TABLE altered.
 
 
mhouri.world > CREATE TABLE child (p_id number REFERENCES parent);
 
TABLE created.
 
mhouri.world > CREATE OR REPLACE
  2     TRIGGER child_trg after DELETE OR INSERT OR UPDATE of p_id ON child FOR each row
  3    begin
  4            IF (inserting OR updating)
  5            then
  6                    UPDATE parent SET child_cnt = child_cnt+1 WHERE id = :new.p_id;
  7            end IF;
  8            IF (updating OR deleting)
  9            then
 10                    UPDATE parent SET child_cnt = child_cnt-1 WHERE id = :old.p_id;
 11            end IF;
 13    end  child_trg;
 14   /
 
TRIGGER created.
 
mhouri.world > INSERT INTO parent (id) VALUES (1);
 
1 row created.
 
mhouri.world > commit;
commit
*
ERROR at line 1:
ORA-02091: transaction rolled back 
ORA-02290: CHECK constraint (MHOURI.CHECK_CNT) violated 
 
 
mhouri.world > INSERT INTO parent(id) VALUES (1);
 
1 row created.
 
mhouri.world > INSERT INTO child(p_id) VALUES (1);
 
1 row created.
 
mhouri.world > commit;
 
Commit complete.
Ceci étant, cette solution est limitée car comme me l'a indiqué Tom Kyte:

(a) les triggers ne se déclenchent pas lors d'un "direct path''
(b) les triggers peuvent êtres disablés

Bien Cordialement

Mohamed Houri
__________________
Bien Cordialement
www.hourim.wordpress.com
Mohamed.Houri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 12h29   #15
Membre du Club
 
Inscription : novembre 2007
Messages : 226
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 226
Points : 66
Points : 66
Bonjour,

J'ai esayé de créer le trigger mais suite à un "commit_form", le message suivant est affiché:
Code :
FRM-99999 : Erreur 408. Reportez-vous au fichier relnotes pour plus d’informations.
tunis71187 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2011, 16h36   #16
Membre du Club
 
Inscription : novembre 2007
Messages : 226
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 226
Points : 66
Points : 66
Bonjour,

C'est résolu enfin.
J'ai inspiré de l'idée de Mohamed Houri et j'ai ajouté le déclencheur ON_COMMIT:
Code :
1
2
3
4
5
6
7
8
9
10
11
 
  -- vérifier la contrainte
  forms_ddl ('set constraint cmpt_det immediate');
  IF NOT form_success AND dbms_error_code=2290 then
    -- contrainte violée
    messagebox('Chaque bloc maitre doit avoir au moins un détail.');
    raise form_trigger_failure;
  else
  	commit_form;
  end IF;
end;
Mais le problème c'est que je ne peut pas ajouter une contrainte dans une table non vide.

S'il y a un truc merci de m'éclairsir.
tunis71187 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 09h40   #17
Membre du Club
 
nancy carina
Inscription : décembre 2010
Messages : 34
Détails du profil
Informations personnelles :
Nom : nancy carina

Informations forums :
Inscription : décembre 2010
Messages : 34
Points : 45
Points : 45
Citation:
Envoyé par tunis71187 Voir le message
Bonjour,

C'est résolu enfin.
J'ai inspiré de l'idée de Mohamed Houri et j'ai ajouté le déclencheur ON_COMMIT:
Code :
1
2
3
4
5
6
7
8
9
10
11
 
  -- vérifier la contrainte
  forms_ddl ('set constraint cmpt_det immediate');
  IF NOT form_success AND dbms_error_code=2290 then
    -- contrainte violée
    messagebox('Chaque bloc maitre doit avoir au moins un détail.');
    raise form_trigger_failure;
  else
  	commit_form;
  end IF;
end;
Mais le problème c'est que je ne peut pas ajouter une contrainte dans une table non vide.

S'il y a un truc merci de m'éclairsir.
je crois que si , tu peux ajouter une contrainte a la table comme suit :
Code :
1
2
alter table nom_table add_constraint nom_contrainte  constraint_type (nom_colonne);
nancy_carina est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 10h06   #18
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
Facile !
Faire un item calculé sur le bloc maitre
Calcul :Summary
Fonction : Count
Block : <block détail>
Item : <un item du bloc fils>

Tester la valeur dans le pre insert ou le pre_update du bloc maitre si lavaleur de l'item > 0
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 12h21   #19
Membre du Club
 
Inscription : novembre 2007
Messages : 226
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 226
Points : 66
Points : 66
Merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii Garuda pour l'idée.

Mais avant de clôturer ce sujet je veux juste une information:

La fonction Count est la même la fonction Décompte sous Forms?

Merci.
tunis71187 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2011, 10h48   #20
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
Je suppose que oui.
Si j'ai dit count, c'est que j'utilise form builder en anglais !
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda 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 08h52.


 
 
 
 
Partenaires

Hébergement Web