IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Forms Oracle Discussion :

Affichage enregistrement sur des champs tabulaires


Sujet :

Forms Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 125
    Par défaut Affichage enregistrement sur des champs tabulaires
    bonjour

    j'ai crée un block (du nom resultat_recherche) de deux champs tabulaires( champ application et champ profil ) qui contient 5 lignes. Et j'aimerai, en parcourant ma table dans la BDD, afficher chaque ligne d'enregistrement sur une ligne de mes champs tabulaires.

    Voila le code que j'utilise, mais tous les enregistrements s'affichent sur la première ligne uniquement.

    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
     
    DECLARE
    	-- déclaration du curseur
      CURSOR C_EMPLOYE_PROFIL IS
      SELECT application_id, profil_id FROM employe_profil WHERE employe_id = :EMPLOYE_RECH.MATRICULE;
     	id_profil number(10); -- Variable qui va contenir l'id du profil
     	id_application number(10); -- Variable qui va contenir l'Id de l'application
     
    BEGIN
    	OPEN C_EMPLOYE_PROFIL;
    	LOOP -- boucle sur les lignes
    		FETCH C_EMPLOYE_PROFIL INTO id_profil, id_application ; -- Lecture d'une ligne
    		  :resultat_recherche.application := id_application ; -- Affectation de l'ID de l'application au champ application
    		  :resultat_recherche.profil := id_profil;  -- affectation de l'ID du profil au champ profil
    		EXIT WHEN C_EMPLOYE_PROFIL%NOTFOUND ; -- sortie lorsque le curseur ne ramène plus de ligne
    	END LOOP ;
    	CLOSE C_EMPLOYE_PROFIL ; -- fermeture du curseur
     
    END ;

  2. #2
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    Je ne suis pas un pro des curseurs mais à quel moment tu renseignes la variable de la clause WHERE?
    Tu as écrit "WHERE employe_id = :EMPLOYE_RECH.MATRICULE;" mais lors du OPEN du curseur tu récupères tout, non?

    Qu'entends-tu par "champ tabulaire"?

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 125
    Par défaut
    Je ne suis pas un pro des curseurs mais à quel moment tu renseignes la variable de la clause WHERE?
    Tu as écrit "WHERE employe_id = :EMPLOYE_RECH.MATRICULE;" mais lors du OPEN du curseur tu récupères tout, non?
    employe_id est renseigné dans un champ du nom de MATRICULE qui se trouve dans un autre block qui a pour nom EMPLOYE_RECH. c'est pour cela que je fais WHERE employe_id = :EMPLOYE_RECH.MATRICULE

    Qu'entends-tu par "champ tabulaire"?
    Nom : Capture2.PNG
Affichages : 138
Taille : 5,0 Ko

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 125
    Par défaut
    Salut,

    Après d’intenses recherches, j'ai trouvé un lien qui m'a beaucoup aidé https://www.developpez.net/forums/d9...ultat-requete/

    Donc j'ai adapté mon code comme ceci:
    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
     
    DECLARE
    	-- déclaration du curseur
      CURSOR C_EMPLOYE_PROFIL IS
      SELECT application_id, profil_id FROM employe_profil WHERE employe_id = :EMPLOYE_RECH.MATRICULE;
     
     	intitule_application varchar2(30); -- Variable qui va contenir l'Intitulé de l'application
     	intitule_profil varchar2(30); -- Variable qui va contenir l'Intitulé du profil
    BEGIN
      GO_BLOCK('RESULTAT_RECHERCHE');
      --FIRST_RECORD;
    	FOR val IN C_EMPLOYE_PROFIL LOOP
    		--CREATE_RECORD;
    		SELECT intitule INTO intitule_application from application WHERE id = val.application_id; -- recherche de l'intitulé de l'application
    		SELECT intitule INTO intitule_profil from profil WHERE id = val.profil_id;  -- recherche de l'intitulé du profil
     
    		:RESULTAT_RECHERCHE.APPLICATION_ID := intitule_application; -- Affectation de l'intitulé de l'application 
    		:RESULTAT_RECHERCHE.PROFIL_ID := intitule_profil; -- Affectation de l'Intitulé du profil
    		NEXT_RECORD;	
    	END LOOP;
      FIRST_RECORD;
    END;
    ça marche bien mais j'ai un souci. je veux que à chaque clic sur le bouton de recherche, le block de champs tabulaires soit vide d'abord avant d'afficher le résultat de la recherche

  5. #5
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Ce n'est pas la bonne méthode sous Forms (faire une boucle pour insérer des lignes dans un block tabulaire), il vaut mieux utiliser les blocks basés c'est plus simple et performant.


    Mets ton block RESULTAT_RECHERCHE en Block basé sur la table employe_profil
    Désactive les INSERT, UPDATE, DELETE au niveau Block (afin d'éviter de verrouiller/modifier/supprimer les enregistrements)
    Clause where du block : employe_id = :EMPLOYE_RECH.MATRICULE


    Dans ton block RESULTAT_RECHERCHE,
    Tu renommes tes 2 champs intitulés que tu as nommé application_id et profil_id en intitule_applic et intitule_profil. Tu les mets en Non Basés
    Tu crées les 2 champs (application_id, profil_id) en Display itemNon visible


    Tu crées un trigger POST-QUERY sur le block résultat_recherche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     -- recherche de l'intitulé de l'application
    SELECT intitule INTO :RESULTAT_RECHERCHE.intitule_applic from application WHERE id = :RESULTAT_RECHERCHE.application_id;
     
     -- recherche de l'intitulé du profil
    SELECT intitule INTO :RESULTAT_RECHERCHE.intitule_profil from profil WHERE id = :RESULTAT_RECHERCHE.profil_id;
    END;
    Et dans le trigger When-Button-Pressed de ton bouton, tu remplaces le code par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Go_Block('RESULTAT_RECHERCHE');
    CLEAR_BLOCK(NO_VALIDATE);
    EXECUTE_QUERY;

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 125
    Par défaut
    Citation Envoyé par McM Voir le message
    Désactive les INSERT, UPDATE, DELETE au niveau Block (afin d'éviter de verrouiller/modifier/supprimer les enregistrements)
    Clause where du block : employe_id = :EMPLOYE_RECH.MATRICULE
    quand je désactive j'ai ce message d'erreur lorsque j'essaie de saisir le matricule: FRM-40200: Champ protégé contre les modifications
    Tu crées un trigger POST-QUERY sur le block résultat_recherche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     -- recherche de l'intitulé de l'application
    SELECT intitule INTO :RESULTAT_RECHERCHE.intitule_applic from application WHERE id = :RESULTAT_RECHERCHE.application_id;
     
     -- recherche de l'intitulé du profil
    SELECT intitule INTO :RESULTAT_RECHERCHE.intitule_profil from profil WHERE id = :RESULTAT_RECHERCHE.profil_id;
    END;
    Et dans le trigger When-Button-Pressed de ton bouton, tu remplaces le code par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Go_Block('RESULTAT_RECHERCHE');
    CLEAR_BLOCK(NO_VALIDATE);
    EXECUTE_QUERY;
    J'aimerai savoir maintenant où sera placé la condition de ma requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT application_id, profil_id FROM employe_profil WHERE employe_id = :EMPLOYE_RECH.MATRICULE;
    ,
    puisque je ne veux pas afficher toute la table employe_profil, mais seulement le résultat de la recherche en fonction du matricule saisie

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 01/06/2006, 15h11
  2. requêtes sur des champs date
    Par wiwi dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 03/02/2006, 14h14
  3. calcul sur des champs
    Par Tierisa dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 20/01/2006, 12h55
  4. tri sur des champs calculés
    Par Thib dans le forum Bases de données
    Réponses: 10
    Dernier message: 18/10/2005, 17h24
  5. Boucler sur des champs texte
    Par syl2095 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/11/2004, 16h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo