Passer les paramètres d'un formulaire checkbox à une procédure
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 :
Code:
1 2 3 4
| create table PROJECTS (
ID_PROJ number(3),
NAMEP varchar2(10)
); |
Formulaire :
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
|
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; |
Le package :
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
|
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;
/ |
La méthode utilisée n'est autre que celle décrite ici :
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 :
Code:
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 */ |
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 :mur:
Si vous avez des idées ou une explication, je suis preneur !
Merci d'avance.
Cordialement
F2B