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 26/08/2008, 22h31   #1
Invité de passage
 
Inscription : août 2008
Messages : 14
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 14
Points : 1
Points : 1
Par défaut Sélectionner plusieurs 'lignes d'enregistrements' à partir d'un datablock ou LOV

Salut,

Je suis en train de developper une application sous oracle forms 10g.
dans un premier temps, je vais vous expliquer la demarche logique que doit suivre cette application.
Alors elle doit:

- d'abord afficher à l'utilisateur un ensemble d'enregistrements basés sur des tables.
- l'utilisateur doit à partir de l'ensemble 'des lignes affichées' choisir plusieurs lignes, qui vont etre employées dans la suite du traitement et enregistrer par un insert dans une autre table indépendante.

J'ai pensé à deux solutions:

- soit je crée un block de donnée et je l'affiche sous forme de tableau, mais je me pose toujours la question; comment l'utilisateur va pouvoir choisir plusieurs lignes ? j'ai pensé à un checkbox devant chaque ligne d'enregistrement pour choisir ou non la ligne mais est ce possible.
- soit grace à une LOV (ce qui est pratique puisque j'ai plusieurs lignes d'enregistrements à afficher et la fct de recherche associé est bien pratique ), mais le problème est que dans la LOV, on choisit une seul ligne pour la retourner aussi dans une seul ligne d'items recepteurs ou dans une list item. Je ne sais pas s'il y a la possibilité de, à chaque la LOV appelée, retourner la ligne selectionnée dans une ligne autre que celle déja rempli la première fois et répéter cela tant que l'utilisateur veut choisir encore d'autres lignes différentes de celle retournées à partir de la LOV.

Merci.
developp001 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2008, 23h31   #2
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 459
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 459
Points : 4 226
Points : 4 226
Option 1 : Une checkbox dans ton block.
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2008, 11h28   #3
Invité de passage
 
Inscription : août 2008
Messages : 14
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 14
Points : 1
Points : 1
Bonjour,
j'ai essayé mais j'ai un datablock multiligne donc quand j'ajoute le checkbox (multiligne et non basé) et execute et meme si le checkbox lui meme est multiligne, une seul checkbox est activé c'est le premièr, les autres sont grisés .
moi je veux qu'elle soient toutes activés pour que l'utilisateur ait la possiblité de choisir plusieurs fois. Et si cela s'avère possible, comment savoir pour chaque checkbox ligne d'enregistrement qui lui correspond.
merci.
developp001 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2008, 11h48   #4
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 459
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 459
Points : 4 226
Points : 4 226
Ta checkbox est dans un block, c'est comme un champ normal (sauf qu'il n'est pas basé).

Pour savoir si une ligne est cochée, il faut reparcourir le block du début à la fin et de tester la checkbox (soit par la valeur soit par la fonction checkbox_checked)
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2008, 11h59   #5
Invité de passage
 
Inscription : août 2008
Messages : 14
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 14
Points : 1
Points : 1
Citation:
Envoyé par McM Voir le message
Ta checkbox est dans un block, c'est comme un champ normal (sauf qu'il n'est pas basé).
Vous avez raison, je l'ai réessayé et ça a marché

Citation:
Envoyé par McM Voir le message
Pour savoir si une ligne est cochée, il faut reparcourir le block du début à la fin et de tester la checkbox (soit par la valeur soit par la fonction checkbox_checked)
Comment savoir le rang de la ligne des enregistrements (sous forme d'un datablock tableau d'item) et de la checkbox correspondante, si vous pouvez me donner un exemple du code .
developp001 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2008, 13h38   #6
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 459
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 459
Points : 4 226
Points : 4 226
Un block basé B1 qui contient
1 item basé IDCLIENT
1 checkbox non basée (CK_SEL)

L'utilisateur affiche les données par un query et sélectionne ensuite les lignes par la checkbox.

Un bouton permet d'avoir la liste des idclient sélectionnés :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
When button pressed :
DECLARE
v_liste VARCHAR2(2000);
BEGIN
GO_BLOCK('B1');
FIRST_RECORD;
LOOP
 IF checkbox_checked('b1.ck_sel')
 THEN
   v_liste := v_liste ||','|| :b1.idclient;
 END IF;
 EXIT WHEN :system.last_record = 'TRUE';
 NEXT_RECORD;
END LOOP;
 message('Liste des idclients :'|| ltrim(v_liste, ','));
 message(' ');
END;
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2008, 15h35   #7
Invité de passage
 
Inscription : août 2008
Messages : 14
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 14
Points : 1
Points : 1
Je l'ai essayé deux fois et quand je clique sur le boutton pour l'affichage de la liste ça donne le message frm-40102
developp001 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2008, 09h52   #8
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 459
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 459
Points : 4 226
Points : 4 226
Citation:
FRM-40102: Record must be entered or deleted first.
Cause: You pressed [Next Record] or [Down] in a context where it is meaningless.
Either:
1. The last record in a block is the current record.
2. The block is empty.
3. You are in a new record in the middle of the block created by pressing [Insert Record].
Action: No action is necessary.
Level: 5
Type: Error
Y'a un problème de navigation. Vérifies que tu es bien dans le bon block, et trace, pas à pas. [mets des message('trace1'); message(' ');] le 2ème message(' ') c'est pour avoir une fenêtre bloquante.
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2008, 16h28   #9
Invité de passage
 
Inscription : août 2008
Messages : 14
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 14
Points : 1
Points : 1
Oui, quand je veux remplir le bloc j'execute à partir d'un boutton une procédure du genre:
Citation:
PROCEDURE prc( item1 )
IS
cursor cur_1 is
select champ1,champ2...
from table1
where item1 = '44'
cur_2 cur_1%rowtype;
BEGIN
go_block('bloc1');
first_record;
open cur_1;
loop
fetch cur_1 into cur_2;
exit when cur_1%notfound;
:bloc1.item_text1 := c2.champ1;
...

next_record;
end loop;
if cur_1%notfound then
close c1;
raise no_data_found;
end if;
close cur_1;
END;
Quand j'appuie sur le boutton le bloc se rempli mais s'ajoute une ligne vide à la fin du bloc. Je pense que c'est ça le problème et j'ai pas pu encore le résoudre.
developp001 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2008, 16h35   #10
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 459
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 459
Points : 4 226
Points : 4 226
Tu peux pas baser le block ?

Sinon, pour remplir un block non basé, evite le next_record, fait plutôt un create record au début.
Tu n'as qu'à tester si c'est ta première ligne de curseur et dans ce cas, pas de create record.
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2008, 21h16   #11
Invité de passage
 
Inscription : août 2008
Messages : 14
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 14
Points : 1
Points : 1
Citation:
Tu peux pas baser le block ?
- je veux bien mais j'ai bel et bien essayé sans résultat.

d'abord j'ai besoin d'une condition where lié à une valeur saisie dans un item text (j'ai essayé de mettre la condition dans la propriété: clause where dans le bloc mais l'interrogation n'a rien retournée).

Ensuite j'ai besoin devant chaque ligne d'enregistrements du bloc multiligne d'un checkbox pour valider. Alors soit je crée le checkbox et je l'associe au meme bloc et dans ce cas aussi l'interrogation n'a rien retournée et le checkbox correspondant au premier enregistrement est activé alors que les suivant sont tous grisés ou non activés, soit je le crée et associe à un autre bloc 'biensur non basé' et là l'interrogation retourne bien les enregistrements mais le check box reste le meme.


Citation:
Sinon, pour remplir un block non basé, evite le next_record, fait plutôt un create record au début.
Tu n'as qu'à tester si c'est ta première ligne de curseur et dans ce cas, pas de create record.
pour ce cas là quand j'ai appelé la procédure pour me ramener les enregistrements de la base à chaque enregistrement correspond un checkbox activé ce qui n'était pas le cas pour le bloc dit basé mais comme j'ai dit dans le dernier poste il y a le problème de cet enregistrement vide qui s'ajoute à la fin et que le create_record n'a pas résolu.

voilà, je voulais vous résumer la situation pour que vous y voyez plus clair.
developp001 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2008, 10h06   #12
Invité de passage
 
Inscription : août 2008
Messages : 14
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 14
Points : 1
Points : 1
J'ai réessayé l'exemple que vous m'aviez donné pour l'affichage des messages et cela a marché (après des modifications dans le block de données).
Mais j'ai toujours le problème que je veux insérer les lignes choisis ou cochées par l'ultilisateur dans une table historique à la fin de l'application. Le problème est quand je parcoure le block et je fais la condition sur le checkbox je ne peux pas insérer dans une autre table que celle depuis laquelle j'ai récupéré les données du block.
merci bien.
developp001 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h07.


 
 
 
 
Partenaires

Hébergement Web