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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
create table PROJECTS (
  ID_PROJ number(3),
  NAMEP varchar2(10)
);
Formulaire :
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;
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
 
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 : 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 */
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


Si vous avez des idées ou une explication, je suis preneur !
Merci d'avance.

Cordialement

F2B