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

AS/400 Discussion :

Sous-fichiers : limite de défilement atteinte


Sujet :

AS/400

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 33
    Points : 21
    Points
    21
    Par défaut Sous-fichiers : limite de défilement atteinte
    Bonjour,

    Voilà mon problème : j'affiche un sous-fichier en RPG ILE (SQL), qui fonctionne bien excepté que quand on atteint les limites de défilement (début et fin du sous fichier), le terminal (dans mon cas l'émulation écran de Client Access) se bloque et je dois appuyer sur la touche CTRL du clavier pour débloquer le terminal.
    Ce n'est pas le comportement que j'observe habituellement dans les écrans OS/400.

    Quelqu'un sait-il s'il faut mettre un indicateur particulier pour gérer les touches ROLLUP et ROLLDOWN ?

    Merci par avance
    Vincent


    ps : je n'ai pas le code source ici mais je le posterais si besoin quand j'aurais accès à l'AS/400.

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut ERRSFL
    Ajoute le mot clé ERRSFL au niveau fichier dans les DDS.

    Si ça ne solutionne pas le pb, colle ici les DDS pour analyse.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    Bonjour,

    Merci pour ta réponse. Cela solutionne en partie le problème : en effet, quand j'arrive sur mon sous-fichier, je ne suis plus bloqué directement comme avant. En revanche, j'ai toujours un blocage quand je dépassé les limites du sous-fichier.

    Voici mon DDS (DSPF) :


    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
         A*%%TS  SD  20091223  222745  VINCENT     REL-V4R4M0  5769-PW1
         A*%%EC
         A                                      DSPSIZ(24 80 *DS3)
         A                                      ERRSFL
         A          R ADDPRD
         A*%%TS  SD  20091219  191817  VINCENT     REL-V4R4M0  5769-PW1
         A                                  1 32'Ajouter un produit'
         A                                      DSPATR(HI)
         A                                  3  2'Veuillez saisir les données nécess-
         A                                      aires :'
         A                                      COLOR(BLU)
         A                                  6  4'Code barre . . :'
         A                                  7  4'Libellé  . . . :'
         A                                  8  4'Prix . . . . . :'
         A            CDEBAR    R        I  6 21REFFLD(PRD/CDEBAR *LIBL/PRD)
         A            LBL       R        I  7 21REFFLD(PRD/LBL *LIBL/PRD)
         A            PRX       R        I  8 21REFFLD(PRD/PRX *LIBL/PRD)
         A                                 22 21'ENTREE pour Valider'
         A                                      DSPATR(HI)
         A                                      COLOR(BLU)
         A          R WRKPRDSFL                 SFL
         A*%%TS  SD  20091223  222745  VINCENT     REL-V4R4M0  5769-PW1
         A            $CDEBAR   R        O  7  8REFFLD(PRD/CDEBAR *LIBL/PRD)
         A            $LBL      R   35   O  7 29REFFLD(PRD/LBL *LIBL/PRD)
         A            $PRX      R        O  7 65REFFLD(PRD/PRX *LIBL/PRD)
         A                                      EDTCDE(Z)
         A            $OPT           1S 0I  7  5
         A          R WRKPRDCTL                 SFLCTL(WRKPRDSFL)
         A*%%TS  SD  20091223  222745  VINCENT     REL-V4R4M0  5769-PW1
         A                                      SFLSIZ(9999)
         A                                      SFLPAG(0010)
         A                                      CA03
         A                                      CA06
         A                                      CA09
         A                                      OVERLAY
         A                                      SFLDSP
         A                                      SFLDSPCTL
         A  50                                  SFLCLR
         A  60                                  SFLEND(*MORE)
         A                                      SFLCSRRRN(&CSRRRN)
         A            CSRRRN         5S 0H
         A                                  1 32'Liste des produits'
         A                                      DSPATR(HI)
         A                                  6  8'Code barre produit'
         A                                      COLOR(BLU)
         A                                  6 29'Libellé du produit'
         A                                      COLOR(BLU)
         A                                  6 66'Prix'
         A                                      COLOR(BLU)
         A                                  6  4'Opt'
         A                                      COLOR(BLU)
         A          R WRKPRDFTR
         A*%%TS  SD  20091220  011933  VINCENT     REL-V4R4M0  5769-PW1
         A                                 19  6'F3=Quitter'
         A                                      COLOR(BLU)
         A                                 19 22'F6=Créer...'
         A                                      COLOR(BLU)
         A                                 19 40'F9=Trier'
         A                                      COLOR(BLU)
         A                                 21  6' ==> '
         A            FLD001        34A  I 21 13DSPATR(PC)

    Et mon code ILE RPG (avec SQL dynamique dedans) :


    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
         FECRANS    CF   E             WORKSTN SFILE(WRKPRDSFL:WRrn1)
         DWRrn1            S              4  0 Inz
         DQUERY            S            100A   VARYING
         DQUERY1           S             90A   VARYING Inz('SELECT CDEBAR, -
         D                                     LEFT(LBL, 35) as LBL, PRX -
         D                                     FROM PRD ORDER BY ' )
         DORDER            S             10A   VARYING Inz('CDEBAR')
         C                   DoW       *InKC = *Off
         C                   Eval      *In(50) = *On
         C                   Eval      CSRRRN = 99
         C                   Write     WRKPRDCTL
         C                   Eval      *In(50) = *Off
         C                   Eval      *In(60) = *On
         C                   Eval      WRrn1 = *Zeros
         C                   Eval      QUERY = %trim(QUERY1)+ ' '+ %trim(ORDER)
         C/EXEC SQL PREPARE S1 FROM :QUERY
         C/END-EXEC
         C/EXEC SQL DECLARE MAINCURSOR CURSOR FOR S1
         C/END-EXEC
         C/EXEC SQL OPEN MAINCURSOR
         C/END-EXEC
         C                   DoW       SQLSTT = '00000' AND WRrn1 < 9999
         C/EXEC SQL FETCH NEXT FROM MAINCURSOR INTO :$CDEBAR, :$LBL, :$PRX
         C/END-EXEC
         C                   If        SQLSTT = '00000'
         C                   Eval      WRrn1 = WRrn1 + 1
         C                   Eval      CSRRRN = WRrn1
         C                   Write     WRKPRDSFL
         C                   EndIf
         C                   EndDo
         C/EXEC SQL CLOSE MAINCURSOR
         C/END-EXEC
         C                   If        WRrn1 < 1
         C                   Eval      WRrn1 = 1
         C                   Eval      $CDEBAR = 'Aucun produit.'
         C                   Write     WRKPRDSFL
         C                   EndIf
         C                   If        CSRRRN = 0
         C                   Eval      CSRRRN = 1
         C                   EndIf
         C                   Write     WRKPRDFTR
         C                   ExFmt     WRKPRDCTL
         C                   Select
         C                   When      *InKF = *On
         C                   Call      'ADDPRD'
         C                   When      *InKI = *On AND %trim(ORDER) = 'CDEBAR'
         C                   Eval      ORDER = 'LBL'
         C                   When      *InKI = *On AND %trim(ORDER) = 'LBL'
         C                   Eval      ORDER = 'PRX'
         C                   When      *InKI = *On AND %trim(ORDER) = 'PRX'
         C                   Eval      ORDER = 'CDEBAR'
         C                   EndSl
         C                   Eval      *In89 = *On
         C                   EndDo
         C                   Eval      *InLR = *On


    Merci par avance pour votre aide. Je précise que je suis débutant dans le domaine, aussi toute suggestion d'améliorations/optimisations du code est la bienvenue.

    Cordialement,

    Vincent Billard

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Tu devrais déclarer la touche 'ROLLUP' non conditionnée dans ton DSPF et la gérer dans ton programme pour éviter de reseter le clavier avec la touche 'Control' si limite défilement atteinte.
    Egalement, définis un vrai sous-fichier auto-extensible avec SFLSIZ = SFLPAG + 1 (par ex. SFLSIZ(11) et SFLPAG(10)). Dans ton programme, tu ne charges alors jamais qu'une seule page à la fois et ce n'est que lorsque l'utilisateur pagine en avant (ROLLUP ou PAGEDOWN) que le programmeur charge la page suivante. La gestion de la pagination arrière est alors automatiquement assurée par le système et c'est beaucoup plus confortable et pour le user et le pour programmeur.

    Au sujet des indicateurs, tu devrais t'inspirer de cet extrait de programme ci-dessous pour les coder au lieu d'employer l'antique méthode avec *INKx. D'autres préféreront une autre méthode basée sur les indicateurs avec *IN, mais celle que j'expose ici est AMHA suffisante pour qqn qui débute.

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    FMyScreen    cf   e             workstn     
    F                                     sfile(sfl02:s2rrn)
    F                                     infds(INFDS)      
                                                                             
     * Named hexadecimal constants for function keys                         
    D  F1             C                   X'31'                              
    D  F2             C                   X'32'                              
    D  F3             C                   X'33'                              
    D  F4             C                   X'34'                              
    D  F5             C                   X'35'                              
    D  F6             C                   X'36'                                   
    D  F7             C                   X'37'                                   
    D  F8             C                   X'38'                                   
    D  F9             C                   X'39'                                   
    D  F10            C                   X'3A'                                   
    D  F11            C                   X'3B'                                   
    D  F12            C                   X'3C'                                   
    D  F13            C                   X'B1'                                   
    D  F14            C                   X'B2'                                   
    D  F15            C                   X'B3'                                   
    D  F16            C                   X'B4'                                   
    D  F17            C                   X'B5'                                   
    D  F18            C                   X'B6'                                   
    D  F19            C                   X'B7'                                   
    D  F20            C                   X'B8'                                   
    D  F21            C                   X'B9'                                   
    D  F22            C                   X'BA'                                   
    D  F23            C                   X'BB'                                   
    D  F24            C                   X'BC'                                   
    D  Enter          C                   X'F1'                                   
    D  PageUp         C                   X'F4'                                   
    D  PageDown       C                   X'F5'                                   
                                                                                  
     * Screen File information data structure. 
    D INFDS           DS                
    D  Key                  369    369
    
    
     /Free
         Select;
           When Key = F3;
             ExSr Exit;
           When Key = F4;
             ExSr Prompt;
           When Key = F5;
             ExSr Refresh;
         EndSl;
     /End-Free

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    Merci pour tes conseils. J'essaye ce soir et je te tiens au courant.

    Cordialement,

    Vincent

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    Bonjour,

    J'ai fait comme tu me l'a indiqué : ça fonctionne très bien.

    Seul hic : les perfomances.
    En effet, vu qu'on rejoue la requête à chaque fois et que dans celle ci il y a un "order by", j'ai l'impression que l'AS/400 reparcoure tous les enregistrements en base (environs 5000 lignes dans la table) et comme j'ai un serveur plutôt ancien (9406 250 avec CPU 2295 et 256 MB de ram) ce n'est pas très rapide.

    Ma question est donc : y a t'il des moyens d'optimiser ce fonctionnement?

    Merci

    Vincent

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Quelle version de l'OS ?

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    OS/400 V4R5

    Cordialement,
    Vincent

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Le problème c'est que le nouveau moteur SQE est apparu à la version V5R2.
    Tu utilises donc le moteur SQL CQE (utilisé aussi par l'OPNQRYF), ne t'attends donc pas à de bonnes performances tout au contraire c'est une vraie m....
    Si tu n'avais beaucoup d'enregs à charger, il te faudrait les charger tous et utiliser l'Api QLGSORT pour un tri en mémoire (idem que le F16 dans le WRKACTJOB).
    Avec beaucoup d'enregs à trier dans un SF sans SQE, pas vraiment de solutions si ce n'est d'expliquer à l'utilisateur qui peut aller se faire un café et de laisser faire cette m.... de CQE.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    Serais-ce plus performant sans utiliser SQL ? (passer par les I/O natives de RPG ?)

    Merci pour ces explications.

    Vincent

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    yes pas photo !!!! si c'est CQE qui tient la barre.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    merci pour les réponses.
    je considère ma question comme résolue, je la cloture donc.

    cordialement,
    Vincent

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/12/2006, 10h51
  2. Problème à l'exportation sous fichier texte
    Par Drozo dans le forum Access
    Réponses: 2
    Dernier message: 04/09/2006, 15h45
  3. Taille de fichier limité ???
    Par vince26 dans le forum Langage
    Réponses: 4
    Dernier message: 29/08/2005, 17h39
  4. Taille des fichiers limitée à 4Go
    Par alain sayagh dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 13/06/2005, 17h58
  5. [FLASH MX2004] Fichier XML hors d'atteinte
    Par ROUMEG dans le forum Flash
    Réponses: 2
    Dernier message: 19/04/2005, 16h41

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