Bonsoir,
Je m'en remets de nouveau à vous car je rencontre un problème lors du passage de paramètres de mon formulaire.
Mon problème est simple : je souhaite supprimer des enregistrements dans ma BDD à partir d'infos cochées par l'utilisateur.
Une procédure contenant le formulaire affiche des informations sous forme de tableau, avec pour chaque ligne une case à cocher.
Le clic sur le bouton "Delete" fait appel à une procédure contenue dans un package devant supprimer les objets sélectionnés de la BDD. Mais la procédure est sans effet...
Voici mon code :
Table utilisée :
Formulaire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 create table PROJECTS ( ID_PROJ number(3), NAMEP varchar2(10) );
Le package :
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
24
25
26
27
28 CREATE OR REPLACE PROCEDURE ProjectList IS CURSOR curs IS select ID_PROJ, NAMEP from PROJECTS; BEGIN HTP.FORMOPEN('Project.deleteProject'); HTP.TABLEOPEN('LIST'); HTP.TABLEROWOPEN; HTP.TABLEHEADER('Select'); HTP.TABLEHEADER('Name'); HTP.TABLEROWCLOSE; FOR line IN curs LOOP HTP.TABLEROWOPEN; HTP.PRINT('<td> <input type="checkbox" name="names" value="' ||line.NAMEP||' ">'); HTP.TABLEDATA(line.NAMEP); HTP.TABLEROWCLOSE; END LOOP; HTP.TABLECLOSE; HTP.formSubmit(cvalue=>'DELETE'); HTP.FORMCLOSE; END;
La méthode utilisée n'est autre que celle décrite ici :
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
24
25
26 CREATE OR REPLACE PACKAGE Project AS list_empty owa_util.ident_arr; PROCEDURE deleteProject (names IN owa_util.ident_arr := list_empty); END Project; / CREATE OR REPLACE PACKAGE BODY Project AS PROCEDURE deleteProject (names IN owa_util.ident_arr := list_empty) IS i INTEGER; BEGIN IF (names.count > 0) THEN FOR i IN names.first..names.last LOOP HTP.PRINT(names(i)); /* The name of the project appears well */ delete from PROJECT where NAMEP = names(i); END LOOP; END IF; HTP.PRINT('Succes'); commit; END; END Project; /
http://download.oracle.com/docs/cd/B...b.htm#CHEJIFDF
Dans ma variable "names" de type "owa_util.ident_arr", je contiens bien le nom des projets sélectionnés puisqu'ils s'affichent correctement lors du "HTP.PRINT(names(i));". Mais comme je l'ai dit plus haut, le delete est sans effet...
Je me suis assuré que la procédure deleteProject fonctionnait correctement en effectuant le test suivant :
J'en ai donc conclu que le problème venait des variables stockées à partir de mon formulaire dans mon "owa_util.ident_arr"... Seulement, je ne comprends pas pourquoi
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 CREATE OR REPLACE PROCEDURE testsuppr IS v_names owa_util.ident_arr; BEGIN v_names(1) := 'TEST1'; v_names(2) := 'TEST2'; Project.deleteProject(v_names); END; /* "TEST1" et "TEST2" supprimés de la BDD */
Si vous avez des idées ou une explication, je suis preneur !
Merci d'avance.
Cordialement
F2B
Partager