[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Oct 2002
    Beiträge
    46

    Post Newbie: Fragen zu programm..

    Das programm hatte ich ja schon im Klist-Thread es "läuft" zwar, wirft verursacht bei mir aber einiges Stirnrunzeln.
    Hier erstmal der code

    Code:
     FFEAADAX2IF  E           K        DISK                           UC          
     FGBCLRG00O   E                    DISK                                       
     C                     OPEN FEAADAX2                                          
     C           *ENTRY    PLIST                                                  
     C                     PARM           FIRM    30                              
     C                     PARM           NDRL    3                               
     C                     PARM           VDAT    60                              
     C                     PARM           BDAT    60                              
     C                     EXSR VOR                                               
     C                     EXSR KGEN                                              
     C           AYB       SETLLFEAADAX2             41                           
     C           AYB       READEFEAADAX2                 50                       
     C  N50      *IN26     DOUEQ*ON                                               
     C                     READ FEAADAX2                 26                       
     C           *IN26     IFEQ *ON                                               
     C           AAAA01    ORNE FIRM                                              
     C                     LEAVE                                                  
     C                     ENDIF                                                  
     C           AAAA02    IFEQ NDRL                                              
     C           AAC031    ANDNE*BLANKS                                              
     C                     DO                                                        
     C           AAC015    IFGE VDAT                                                 
     C           AAC015    ANDLEBDAT                                                 
     C                     DO                                                        
     C                     EXSR FOO                                                  
     C                     WRITEGBCLRGR                                              
     C                     ENDDO                                                     
     C                     ENDIF                                                     
     C                     ENDDO                                                     
     C                     ENDIF                                                     
     C                     ENDDO                                                     
     C                     MOVE *ON       *INLR                                      
     C                     CLOSE*ALL
    vdat und bdat sind datumsfelder. in der datenbank sind sie in der form jjmmtt und ich übergebe sie mit z.b. 011224 (heilig abend 2001 benutzte ich im eigentlich aufruf natrülich nicht! is nur ein beispiel). wenn ich für vdat 011201 und für bdat 011231 angebe müssten ja nur die dazwischenliegenden tage ausgewertet werden... nur irgendwie werden alle daten ausgegeben.
    und ein weiteres problem ist die laufzeit...das programm braucht EWIG.. mit SQL dauert die gleiche abfrage sekunden... ich solls aber mit rpg lösen

    Im voraus schonmal danke für die hilfe.

    Peace,

    LoCal

  2. #2
    Registriert seit
    Oct 2002
    Beiträge
    11

    Post

    Mh.. als allererstes ist der Key interessant.

    Die Auswahlsbezugszahl bei DOU ist schonmal schlecht, dazu kommt noch die SETTL, READE Zugriff (Mit einem Chain bist du dabei)

    Wenn ich noch den Schlüssel der Datei hab, dann ist das kein Thema. Ist wahrscheinlich recht einfach.. Geht nebenbei auch ohne Leave, der macht das ganze nur fehleranfälliger.

    Es sind auch noch ein paar Fehler drin:
    1. Nach dem Beginn der ersten DOU Schleife der Read, damit liest er erst den 2. Satz.... Der erste ist also nicht dabei...

    2. Es gibt 2 DO Schleifen.. wo zum Geier verlässt er die?

    Ein ähnlicher Code würde bei mir so aussehen:
    C AYB CHAINFEAADAX2 50
    C *IN50 DOWEQ*OFF
    C AAAA01 ANDEQFIRM
    *
    C AAAA02 IFEQ NDRL
    C AAC031 ANDNE*BLANKS
    C AAC015 DOWGEVDAT
    C AAC015 ANDLEBDAT
    C EXSR F00
    C WRITEGBCLRGR
    C ENDDO
    C ENDIF
    *
    C ????? AYB READEFEADAX2 50
    C ENDDO

    Wenn man den Key noch kennen würde, dann könnte man gleich wissen, ob das ganze in der ersten Schleife noch weiter zu optimieren ist...

    Grüsse Marcus

  3. #3
    Registriert seit
    Oct 2002
    Beiträge
    46

    Post

    Die keys sind aaaa01, aaaa02 und aac015. Das mit dem fehlenden ersten read is mir eingefallen als ich dein post gelesen hab
    Was mich trotzdem wundert is, daß das max und das min Datum nicht beachtet werden..

  4. #4
    Registriert seit
    Oct 2002
    Beiträge
    11

    Post

    Na dann..

    Benutze die Vorteile der AS/400... Wieso IF, wenn du es durch die Lese-Struktur gleich ausschliessen kannst:

    VONKEY KLIST
    KFLD FIRM
    KFLD NDRL
    KFLD VDAT

    READKY KLIST
    KFLD FIRM
    KFLD NDRL

    VONKEY SETLLFEADAX2
    READKY READEFEADAX2 50
    *IN50 DOWEQ*OFF
    AAC015 ANDLEBDAT
    EXSR F00
    WRITEGBCLRGR
    READKY READEFEADAX2 50
    ENDDO

    Damit wäre dein ganzer Lesezyklus drin.
    Du verarbeitest über die direkten Key-Zugriffe nur die Daten, die du auch wirklich haben willst. Sparst dir also die IF´s, den Leave usw.

    Die Geschichte mit allen Daten kann 2 Gründe haben:
    Sind das wirklich Datumsfelder (d. H. in der DDS mit L und DATFMT(*ISO oder was auch immer)) definiert? Oder einfach 6 Stellen numerische Felder?

    1. Bei Datumsfeldern solltest du darauf achten, dass in den H-Specs das richtige Datumsformat verwendet wird. Da ich aber nicht davon ausgehe, dass das so gehandelt ist, siehe 2.

    2. Datum richtig gedreht? Denn dein eingehendes Datum ist ja in der Form TTMMJJ, aber dein Lesezugriff soll ja mit JJMMTT stattfinden. Geht am schnellsten über 1 DS mit 10 Stellen numerisch.

    Am besten einfach mal im Debugger nachschauen. Und vielleicht nicht mit dem Datum 011201 arbeiten, da man dort kaum sieht, dass es gedreht wurde... *grins*

    Grüsse Marcus

Similar Threads

  1. Programm auf "ferner" AS400 ausführen.
    By Souljumper in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 13-05-09, 19:50
  2. Programmbibliothek in einem Cobol oder CL Programm ermitteln
    By schatte in forum NEWSboard Programmierung
    Antworten: 19
    Letzter Beitrag: 10-01-07, 11:32
  3. Windows Programm für Savf-Files
    By Pepi in forum NEWSboard Windows
    Antworten: 2
    Letzter Beitrag: 13-11-06, 16:00
  4. Ein paar Fragen zu DB2/AS400
    By Andreas.Meyer in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 03-08-06, 09:10

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •