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 :

[forms 9i] [BUG ?] parcours d'un bloc multilignes


Sujet :

Forms Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut [forms 9i] [BUG ?] parcours d'un bloc multilignes
    Salut tout le monde,

    Environnement : serveur Windows 2003 hébergeant une base en 10gR1

    Je connais les règles du forum Oracle et je sais pertinemment qu'il ne sert pas à débogguer.
    Cependant, ma demande est particulière dans le sens où j'ai isolé le bout de code fautif et qu'il s'agit d'un pattern que j'utilise 10 fois par jour depuis des mois.

    Ce bout de code est tout simplement destiné à parcourir un bloc multilignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      GO_BLOCK('B3');
      FIRST_RECORD;
      LOOP
    	MESSAGE('st_code = ' || :B3.ST_CODE);
      	EXIT WHEN :SYSTEM.LAST_RECORD = 'TRUE';
      	NEXT_RECORD;
      END LOOP;
    Ce parcours est ICI une boucle infinie.

    Ma question est donc de savoir ce qui pourrait expliquer qu'au 2ème enregistrement de ce bloc parmi les 5 existants, la boucle se répète SANS JAMAIS passer à l'enregistrement suivant dans le bloc.

    Exemple : modification de la requête source du bloc dans le parcours de la boucle, timer existant et généré, variable système à tester / mal positionnée, etc.

    Merci par avance du moindre coup de pouce qui m'aidera à comprendre mon erreur.

  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
    Et bien peut-être une erreur est levée, mais trappée par un triger ON-ERROR, et l'instruction NEXT_RECORD du second enregistrement n'est jamais atteinte...

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    Salut SheikYerbouti,

    Citation Envoyé par SheikYerbouti
    Et bien peut-être une erreur est levée, mais trappée par un triger ON-ERROR, et l'instruction NEXT_RECORD du second enregistrement n'est jamais atteinte...
    Ton idée est... alléchante mais ce n'est pas ça parce qu'en positionnant un point d'arrêt sur le début du trigger ON-ERROR, celui-ci n'est jamais exécuté.

    D'autre part, concernant le fait que l'instruction NEXT_RECORD ne soit jamais atteinte, je pense qu'elle l'est forcément sinon je n'aurais pas une boucle infinie, non ?

    Je te remercie de ta réponse ceci-dit et si tu as une autre idée suite à ma réponse alors n'hésite pas

  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
    Et bien si, justement, car sans NEXT_RECORD, pas de :SYSTEM.LAST_RECORD = 'TRUE' ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Loop
      Null ;
    End loop ;
    exemple typique de boucle sans fin.

  5. #5
    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
    Pour vous en assurer, affichez le numéro de l'enregistrement courant à chaque tour de boucle.

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    J'avais déjà effectué le test en débug.
    Résultat : l'instruction EXIT WHEN... est bien évaluée à chaque tour de boucle et la variable :SYSTEM.TRIGGER_RECORD reste figée sur la valeur 2.
    En effet, en utilisant un synchronize, le curseur se déplace jusqu'au 2ème enregistrement et après il scintille sur celui-ci.

    Très sincèrement vu la simplicité de mon code et le nombre de fonctions / procédures dans lequel je l'utilise sans souci, je ne vois aucun mécanisme qui pourrait interférer dans ce parcours de boucle.

    Comment puis-je m'assurer que ce n'est pas un BUG d'Oracle / Forms ?

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

Discussions similaires

  1. [Forms 6] numéro d'ordre bloc multiligne
    Par Devlop++ dans le forum Forms
    Réponses: 21
    Dernier message: 03/12/2008, 18h35
  2. [forms 10g] BUG avec SET_BLOCK_PROPERTY ?
    Par Magnus dans le forum Forms
    Réponses: 7
    Dernier message: 22/03/2007, 17h15
  3. Réponses: 1
    Dernier message: 19/02/2007, 13h45
  4. Réponses: 11
    Dernier message: 19/09/2006, 10h34
  5. [Forms6i] FRM-40102 dans bloc multiligne
    Par lafouine dans le forum Forms
    Réponses: 3
    Dernier message: 16/08/2005, 18h59

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