|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Membre éclairé
![]() |
Bonjour
sous Forms 6i je possède une liste d'enregistrements Au chargement 5 enregistrements sont ramenés et affichés. Ensuite quand l'utilisateur descend les enregistrement sont chargés/affichés au fur et à mesure l'utilisateur : a la possibilité d'insérer un nouvel enregistrement. Le problème se pose lors de la validation de l'enregistrement car la liste est automatiquement commitée puis rechargée existe-il un petit truc simple pour celui-ci reste sur le nouvel enregistrement
|
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
avant le commit tu sauves le current_record_indicator (à vérifier
|
|
|
00
|
|
|
#3 |
|
Membre habitué
![]() ![]() Inscription : mai 2002 Messages : 257 ![]() |
en faisant tout simplement un Last_Record, cela devrait marcher
|
|
|
00
|
|
|
#4 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
pas si il a inséré le record en plein milieu
|
|
|
00
|
|
|
#5 |
|
Membre habitué
![]() ![]() Inscription : mai 2002 Messages : 257 ![]() |
oooops désolé
|
|
|
00
|
|
|
#6 |
|
Membre éclairé
![]() |
j'essaye tout ça
quand on inssère en plein milieu après le commit l'enregistrement se retrouve systématiquement à la fin car je fais aucun tri ![]() mais je vais quand même faire la solution de orafrance car sinon je jour où je mettrais un tri
|
|
|
00
|
|
|
#7 | |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
Citation:
- tu n'as pas de clause order by (sinon ton enregistrement inséré n'est plus obligatoirement à l'endroit où tu l'as inséré) - si tu ramènes les mêmes enregistrements (il ne faut pas que l'utilisateur ait fait un enter-query avant d'insérer son enregistrement) Mais bon, il n'y a pas d'autres solutions (à ma connaissance)
__________________
Un problème sans solution est un problème mal posé Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP. |
|
|
|
00
|
|
|
#8 | |
![]() ![]() ![]() Inscription : mai 2003 Messages : 6 533 ![]() |
Citation:
__________________
Rédacteur Oracle (Oracle ACE) Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche Je ne réponds pas aux questions techniques par MP Blogs: Forms-PL/SQL-J2EE - Forms Java Beans |
|
|
|
00
|
|
|
#9 |
|
Membre éclairé
![]() |
euh
parce que c'est comme ça Non en fait je ne sais pas si elle est rechargée, mais le fait que la ligne se déplace en dernier enregistrement lorsqu'elle est insérée entre 2 autres, et le fait que le curseur change d'enregistrement "J'ai" supposé que ... il y avait rechargement
|
|
|
00
|
|
|
#10 | ||
![]() ![]() ![]() Inscription : mai 2003 Messages : 6 533 ![]() |
Il faut conserver la valeur de la PK dans une variavle globale dans le trigger de niveau bloc : POST-INSERT
Et ensuite, après l'instruction execute_query (puisqu'elle doit apparament exister) boucler sur les enregistrements jusqu'àu correspondant Trigger POST-INSERT : Code qui contient le execute query : Code :
__________________
Rédacteur Oracle (Oracle ACE) Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche Je ne réponds pas aux questions techniques par MP Blogs: Forms-PL/SQL-J2EE - Forms Java Beans |
||
|
|
00
|
|
|
#11 |
|
Membre éclairé
![]() |
|
|
|
00
|
|
|
#12 | |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
Citation:
C'est quand même dommage qu'il n'y ait pas une commande qui permette de raffraichir les valeurs des champs en fonction de ce qu'il y a dans la base, sans avoir à faire d'execute_query
__________________
Un problème sans solution est un problème mal posé Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP. |
|
|
|
00
|
|
|
#13 |
![]() ![]() ![]() Inscription : mai 2003 Messages : 6 533 ![]() |
Très honnêtement, je ne vois pas la plus-value de refaire execute_query après un insert !!!
__________________
Rédacteur Oracle (Oracle ACE) Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche Je ne réponds pas aux questions techniques par MP Blogs: Forms-PL/SQL-J2EE - Forms Java Beans |
|
|
00
|
|
|
#14 |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
Quand il y a des triggers ! Ou alors il faut reporter tout le code des triggers de la base de données dans les triggers de forms, ce qui est un peu lourd à maintenir...
Mais le problème du raffraichissement des champs ne se pose pas seulement lors des insert : par exemple quand on a un bouton qui appelle une procédure stockée qui fait des mises à jour, il faut refaire un execute_query, ce qui n'est pas l'idéal...
__________________
Un problème sans solution est un problème mal posé Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP. |
|
|
00
|
|
|
#15 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
D'où l'intérêt de travailler sur des program unit et pas directement dans les triggers
|
|
|
00
|
|
|
#16 | |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
Citation:
1. On ne voit pas en temps réel ce qui est dans la base de données puisque certains champs ont été renseignés par les triggers 2. Les enregistrements sont vérouillés puisque mis à jour par le trigger => d'où l'obligation de faire un execute_query.
__________________
Un problème sans solution est un problème mal posé Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP. |
|
|
|
00
|
|
|
#17 |
![]() ![]() ![]() Inscription : mai 2003 Messages : 6 533 ![]() |
En fait, il suffit de forcer l'exécution du trigger POST-QUERY pour synchroniser les valeurs.
Créer un trigger POST-INSERT et POST-UPDATE sur le bloc et ajouter l'instruction suivante : L'inconvénient mineur réside dans le fait qu'un nouvel enregistrement inséré n'est pas réordonné vis à vis de la clause ORDER BY. l'avantage majeur réside dans le fait qu'il n'est pas nécessaire de refaire le query de tout le bloc.
__________________
Rédacteur Oracle (Oracle ACE) Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche Je ne réponds pas aux questions techniques par MP Blogs: Forms-PL/SQL-J2EE - Forms Java Beans |
|
|
00
|
|
|
#18 | ||||||||||||
![]() ![]() ![]() Inscription : mai 2003 Messages : 6 533 ![]() |
Maintenant, si un post-query ne suffit pas à retrouver les informations (cas des colonnes mises à jour par une procédure stockée) voici une autre solution un tantinet plus lourde :
-- Script de la table de test -- Code :
Code :
Code :
Trigger WHEN-NEW-FORM-INSTANCE : Code :
Code :
Code :
Cette solution ne fonctionne pas si tous les enregistrements ne sont pas lus Dernière solution : Dans le trigger POST-INSERT : - récupérer le ROWID créé : :GLOBAL.rowid := :BLOC.ROWID ; - Lire l'enregistrement en base - Appliquer les nouvelles valeurs aux items de l'enregistrement - Replacer le statut de l'enregistrement à QUERY : Set_Record_Property( Get_Block_Property( 'nom_bloc', CURRENT_RECORD ), 'nom_bloc', STATUS, QUERY_STATUS ) ;
__________________
Rédacteur Oracle (Oracle ACE) Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche Je ne réponds pas aux questions techniques par MP Blogs: Forms-PL/SQL-J2EE - Forms Java Beans |
||||||||||||
|
|
00
|
|
|
#19 |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
Merci pour tous ces exemples !
J'ai essayé les différentes solutions : 1. La première ne fonctionne pas ou alors je n'ai pas compris ce qu'il fallait faire, Sheik, peux-tu préciser STP ? 2. Le deuxième fonctionne sans problème, si ce n'est qu'il faut tenir compte des champs entrés en ENTER-QUERY 3. La troisième me renvoie comme je le pensais le message d'erreur FRM-40654 "Enregistrement mis à jour par un autre utilisateur"
__________________
Un problème sans solution est un problème mal posé Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP. |
|
|
00
|
|
|
#20 |
![]() ![]() ![]() Inscription : mai 2003 Messages : 6 533 ![]() |
La première force la ré-exécution du trigger POST-QUERY ( et donc le raffraichissement qu'il peut éventuellement contenir). Inutile, effectivement si tu n'as pas de trigger POST-QUERY ou s'il ne contient pas les instructions suffisantes pour afficher l'ensemble des modifications.
pour la 2ème solution, il est facile de lui passer une clause where plus élaborée.
__________________
Rédacteur Oracle (Oracle ACE) Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche Je ne réponds pas aux questions techniques par MP Blogs: Forms-PL/SQL-J2EE - Forms Java Beans |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com