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 :

Enter_query et execute-Query -trigger utilisés


Sujet :

Forms Oracle

  1. #1
    Membre averti
    Inscrit en
    Août 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 15
    Par défaut Enter_query et execute-Query -trigger utilisés
    Bonjour et merci de m'aider à solutionner ce petit problèmes.

    Voici en gros ce que je veux faire sur Oracle 10g:
    Un simple forms sur lequel on retrouve 3 champs texte (un NO_COMPAGNIE unique (ex. 10 pour Banque X, 20 pour banque Y), son secteur de travail NO_SECTEUR non unique (exemple: 2000 pour informatique, 3000 pour comptabilite, etc), le NOM de l'employé, le PRENOM de l'employé) et un BOUTON ouvrant la liste LOV et deux boutons (Enter_query F7 et Execute_Query F8). Prenons par exemple cette liste de données :

    NO_COMPAGNIE | NO_SECTEUR | NOM | PRENOM
    10 2000 K Julie
    10 3000 P Donald
    20 2000 L Jules
    20 3000 E Albert
    30 2000 A Andre

    Un click sur le bouton ouvre une LOV qui affiche les données de la table et les affichent dans les champs texte ...juste là ça fonctionne bien car la sélection dans la LOV renvoie ses données sélectionnées directement dans les champs textes. Il s'agit de faire une sélection d'un enregistrement dans la lov pour remplir les champs texte...et c'est AUTOMATIQUE.

    Bref : Si NO_COMPAGNIE saisi au clavier est 10 (il y a plus de un NO_SECTEUR dans cette cie) alors 'ouvrir LOV pour permettre de choisir entre 2000 et 3000' les NOM et PRENOM à inscrire dans les champs.
    Si NO_COMPAGNIE saisi au clavier est 30 (il y a un seul NO_SECTEUR dans cette cie) alors 'ne pas ouvrir de LOV et inscrire directement les NOM et PRENOM dans les champs'.


    Maintenant, je voudrais faire une seconde façon de trouver les champs nom et prénom en tapant MANUELLEMENT le NO_COMPAGNIE et faire un Enter ou F8 qui interroge la table pour remplir les deux autres champs NOM et PRENOM trouvées selon le NO_COMPAGNIE saisi.

    Or je ne suis pas au fait de comment fonctionne le Enter-Query (F7) et le Execute-Query (F8) ni le cancel-Query (quelle touche clavier ?) pour pouvoir réaliser cela.

    Aussi, pour m'aider à comprendre, lorsqu'on appuie sur F7 ou F8, par quel trigger le programmes passe ? Bref, qu'est-ce qui se passe lorsqu'on appuie sur ces touches ? Interroger signifie quoi au juste ? Et si le mot saisi au champ NO_COMPAGNIE n'existe pas dans la table, quel trigger utiliser ? (When-validate-item du bloc ou de l'élément ?) Aussi, après validation à savoir si le NO_COMPAGNIE saisie au clavier existe dans la table, je désire que s'il y a un seul NO_SECTEUR dans la table pour ce NO_COMPAGNIE saisi au clavier alors inscrire directement dans les champs NOM et PRENOM les informations trouvées dans la table, alors que si y a plus d'un NO_SECTEUR pour ce NO_COMPAGNIE saisi au clavier alors ouvrir une LOV permettant de sélectionner lequel

    De plus, quel code et dans quel trigger (au niveau form ou item ?) écrire pour réaliser cela...je sais que pour qqn d'habituer avec la programmation Forms, ça devrait être simple et aussi j'espère avoir été claire dans mes explications du problèmes.

    Merci beaucoup de m'aiguiller...je crois que ce sera une bonne base pour que je puisse débuter mon apprentissage.

  2. #2
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    La touche enter-query déclenche le code : do_key('ENTER_QUERY'), soit exécuter le code de l'éventuel trigger KEY_ENTQRY si présent.
    La touche execute-query déclenche le code : do_key('EXECUTE_QUERY'), soit exécuter le code de l'éventuel trigger KEY_EXEQRY si présent.

    Si ces triggers ne sont pas définis au niveau du bloc, Enter-Query passe le block en mode interrogation, donc les champs sont vidés et l'utilisateur peut saisir ses critères. Lorsqu'il exécute le query (Execute-Query) le contenu des champs alimenté par l'utilisateur sert à générer une clause Where de filtrage des données, puis la requête est envoyée au serveur.

  3. #3
    Membre averti
    Inscrit en
    Août 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 15
    Par défaut
    Citation Envoyé par SheikYerbouti Voir le message
    La touche enter-query déclenche le code : do_key('ENTER_QUERY'), soit exécuter le code de l'éventuel trigger KEY_ENTQRY si présent.
    La touche execute-query déclenche le code : do_key('EXECUTE_QUERY'), soit exécuter le code de l'éventuel trigger KEY_EXEQRY si présent.

    Si ces triggers ne sont pas définis au niveau du bloc, Enter-Query passe le block en mode interrogation, donc les champs sont vidés et l'utilisateur peut saisir ses critères. Lorsqu'il exécute le query (Execute-Query) le contenu des champs alimenté par l'utilisateur sert à générer une clause Where de filtrage des données, puis la requête est envoyée au serveur.
    Bonjour et Merci.
    Oui, je comprend que le KEY_ENTQRY et le KEY_EXEQRY doit être présent pour inscrire le code de programmation à l'intérieur de ces triggers qui dira ce que le programme doit faire lorsqu'on appuie ces touches F7 et F8.

    Est-ce possible de les programmer au niveau item et non block ? Car je voudrais sur mon formulaire pouvoir saisir plusieurs NO_COMPAGNIE sur plusieurs ligne et pour chaque NO_COMPAGNIE saisi puis F8, afficher le NOM et PRENOM de l'employé, ensuite on saute avec do_key('next_ ') à la prochaine ligne pour y saisir un autre NO_COMPAGNIE puis F8 qui affichera les NOM et PRENOM de la 2eme ligne (IMPORTANT sans toutefois effacer les NO_COMPAGNIE, NOM et PRENOM de la 1ere ligne ?

    Actuellement, lorsque je saisi un 2eme NO_COMPAGNIE de la ligne 2 et appuie F8, la ligne 1 s'efface....or il faut pas. Ce que je veux faire est de pouvoir saisir plusieurs NO_COMPAGNIE et pour chacun on a les DISPLAY des NOM et PRENOM des employes sélectionné ...et une fois tous les NO_COMPAGNIE choisis et afficher à l'écran ...il suffira de clicker un bouton qui fera un un traitements sur la table pour tous ces employé.

    Alors comment faire pour pas que les NO_COMPAGNIE s'efface et permettre de saisir plusieurs NO_COMPAGNIE et donc plusieurs ligne ?
    Aussi est-ce qu'il faut appuyer F8 à chaque saisie de chaque NO_COMPAGNIE ou peut-on utiliser la touche ENTER qui fera l'interrogation (bref ENTER appelle F8) ?

    Merci

  4. #4
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Le query s'execute sur tout le block. Il n'est pas possible d'avoir un critère différent pour chaque ligne.

  5. #5
    Membre averti
    Inscrit en
    Août 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 15
    Par défaut Alors comment résoudre cela ?
    Citation Envoyé par SheikYerbouti Voir le message
    Le query s'execute sur tout le block. Il n'est pas possible d'avoir un critère différent pour chaque ligne.
    Alors, dites-moi, comment je peux faire cela ?
    Car il s'agit bien, vous l'avez compris, d'avoir un critère pour chaque ligne du bloc....indépendamment donc...(l'objectif est de remplir la liste des NO_COMPAGNIE à l'écran avec un employé qqconque sélectionné parmi tous les employé de cie 1, un autre employé qqconque sélectionné parmi tous les employé de cie 1, un autre de la cie 2, etc afin d'exécuter sur cette liste une fois constitué un traitement SQL tel une mise à jour des données de la table).

    En gros pour rappel, je désire saisir manuellement un NO_COMPAGNIE et sur la sortie du champ, un SQL sera lancé pour retracer dans la table les 3 autres informations pour remplir les 3 champs (NO_SECTEUR, NOM, PRENOM) de cette 1ere ligne.

    Ensuite, on passe au champs NO_COMPAGNIE, on saisie manuellement pareil , le SQL recherche les données, et les trois champs de la ligne 2 se remplissent.

    Ainsi de suite ....

    Se peut-il que je ne puisse pas utiliser le query (F8) ? Et que je doive utiliser le Enter ou autre tel automatiquement au changement dans le champ NO_COMPAGNIE ou à la sortie de ce champs, pour d'abord valider ce que je viens de saisir dans ce champ ?

    UN fait important est que si on utilise la LOV associé à chaque ligne du bloc, alors ça fonctionne et chaque ligne remplit ses 3 champs, mais si ça se fait en passant par les LOV, ça doit surement se faire en saisiisant manuellement les NO_COMPAGNIE de chaque ligne, non ?

    Merci, j'apprécierai obtenir réponse car je ne vois pas comment le faire.
    Votre aide me sera utile...croyez-moi

  6. #6
    Membre averti
    Inscrit en
    Août 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 15
    Par défaut
    En fait, on parle de pouvoir constituer le bloc de données en procédant manuellement par la saisie du champ NO_COMPAGNIE de chaque ligne. Ça se fait via chaque bonton LOV de chaque ligne, alors comment le faire en mode saisie manuelle ?

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 316
    Par défaut
    bonjour,
    generalement le controle se fait le trigger when-validate-item qui se declenche a la sortie de l'item.
    Il n'est pas automatique, il faut coder a l'interieur:
    -Les controle et faire un raise form_trigger_failure si controle NOK

    Pour la recherche sql des données liées j'utilise generalement le trigger POST-CHANGE afin qu'elle se fasse aussi en execute_query.

    Sinon regarde le tutoriel forms sur le site il est tres bien.
    http://sheikyerbouti.developpez.com/forms10g/

  8. #8
    Membre averti
    Inscrit en
    Août 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 15
    Par défaut ça se précise...merci
    Mais comment le faire déclencher automatiquement ? Il faut bien que l'utilisateur appui sur une touche après avoir saisi son NO_COMPAGNIE pour aller la faire valider dans le WHEN-VALIDATE-ITEM ? Utilise t'on la touche TAB, Enter, flèche bas, pour permettre de passer au NO_COMPAGNIE à saisir de la ligne 2 (mais exlure le F8 car celui-ci agit sur le bloc et justement on recherche à inscrire les donné NOM, PRENOM relative à chaque NO_COMPAGNIE saisi sur chaque ligne) ?

    Concernant le trigger POST-CHANGE , j'ai pensé plutot utiliser le POST-RECORD...je fais bien ?

    Concernant "raise form_trigger_failure ", ça fait quoi exactement ?
    Et "afin qu'elle se fasse aussi en execute_query"...je comprend pas excuse moi...il me semble que le excute -query effacera les champs de toutes les lignes, non ? J'ai penser ne pas utiliser le execute-query et coder dans le when-validate-item (si entré saisi est correcte et existe dans la table) l'inscription des champs ( :bloc.NOM = :nom variable de contrôle tempo renvoyé tiré de la rqt de la LOV (not show évidemment)...ok ?

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 316
    Par défaut
    Mais comment le faire déclencher automatiquement ? Il faut bien que l'utilisateur appui sur une touche après avoir saisi son NO_COMPAGNIE pour aller la faire valider dans le WHEN-VALIDATE-ITEM ? Utilise t'on la touche TAB, Enter, flèche bas, pour permettre de passer au NO_COMPAGNIE à saisir de la ligne 2 (mais exlure le F8 car celui-ci agit sur le bloc et justement on recherche à inscrire les donné NOM, PRENOM relative à chaque NO_COMPAGNIE saisi sur chaque ligne) ?
    Le declenchement se fait lorsque le champs et quitté, par tab,fleche,enter ou a la souris

    Concernant le trigger POST-CHANGE , j'ai pensé plutot utiliser le POST-RECORD...je fais bien ?
    c'est un choix, mais dans ce cas l'affichage se fera lorsque l'on passera a un autre enregistrement (ce qui revient au même si le record ne comporte qu'un item)

    Concernant "raise form_trigger_failure ", ça fait quoi exactement ?
    Permet de dire a forms que la validation n'est pas bonne (code incorrect) et de rester dans l'item.

    Et "afin qu'elle se fasse aussi en execute_query"...je comprend pas excuse moi...il me semble que le excute -query effacera les champs de toutes les lignes, non ? J'ai penser ne pas utiliser le execute-query et coder dans le when-validate-item (si entré saisi est correcte et existe dans la table) l'inscription des champs ( :bloc.NOM = :nom variable de contrôle tempo renvoyé tiré de la rqt de la LOV (not show évidemment)...ok ?
    Tous dépend, si l'écran et un écran de critères qui n'est pas stocké en base, effectivement vous n'aurais pas besoin d'execute_query, sinon il faut l'utiliser pour ramener les enregistrements dans un block basé.
    Dans le cas d'un écran de critères vous pouvez effectivement codé dans le when-validate-item

  10. #10
    Membre averti
    Inscrit en
    Août 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 15
    Par défaut Merci
    ...le problème est solutionné. Il s'agit en effet d'un écran de critère à remplir, deux façon possible de faire, en passant par des LOV ou en saississant au clavier les critères. Pour chacun, chaque ligne sera alimenté des infos de l'enregistrement correspondant à ce critère (des champs dit lookup qui servent juste à afficher l'info pour que l'utilisateur puisse vérifier si c'est bien l'enregistrement désiré), et si on passe par une LOV, les données sont directement renvoyés dans les champs lookup après sélection dans la LOV. Si on passe par le clavier pour saisir le critère, l'appuie sur flèche déclenche le When-validate-item qui vérifie si existe dans la table et si oui, un curseur récupère les données de la table correspondant au critère saisi pour renseigné les champs lookup ...et ainsi pour chaque ligne, bref, on se retrouve avec de multi critères dans le bloc, facilement disponible pour un travail quelconque par la suite, tel mise à jour de la table sur ces mutiple critères à mettre dans le "WHERE nom_champs IN liste" où liste=filtre ligne 1, filtre lige 2, filtre ligne 3, bref tout ceux saisis.

    Par contre, TAB, fleche et souris fonctionne pour sortir du champ, mais pas la touche Enter, comment programme son déclenchement, KEY_Enter est là ...

  11. #11
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 316
    Par défaut
    Si des trigger KEY-ENTER sont utilisés alors forms va faire le code qui ci trouve
    et ne quittera pas le champs, sauf a finir le trigger par next_item ou next_record

    Sinon s'il ne sont pas utiles (c'est a dire même code que dans le when-validate), il faut les supprimer pour que la touche entrée permette de juste quitter le champs.

  12. #12
    Membre averti
    Inscrit en
    Août 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 15
    Par défaut Merci à tous pour vos interventions
    Merci à tous pour vos interventions très pertinentes qui m'ont aidé à progresser.

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

Discussions similaires

  1. Erreur execute Query
    Par cjeanmar dans le forum JDBC
    Réponses: 13
    Dernier message: 11/02/2008, 17h31
  2. Réponses: 1
    Dernier message: 11/12/2007, 17h17
  3. executer un trigger avec java
    Par 080983 dans le forum Langage
    Réponses: 1
    Dernier message: 25/08/2007, 20h51
  4. could not execute query
    Par nabil148911 dans le forum Hibernate
    Réponses: 3
    Dernier message: 20/07/2007, 14h37
  5. [SQL SERVER 2000][Trigger] Pb lors de l'execution du trigger
    Par mcousse dans le forum Développement
    Réponses: 4
    Dernier message: 24/11/2006, 11h25

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