[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Sep 2006
    Beiträge
    132
    Ich hätte noch einen Frage, rein Interessehalber. Könnte ich SRCDAT bzw SRCSEQ auch einen String mit der Länge 6 übergeben?

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Übergeben kannst du was du willst, Hauptsache in der Datei stehts dann numerisch.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Sep 2006
    Beiträge
    132
    Ok danke .

    Ich habe jedoch noch eine andere Frage.
    Und zwar musste ich das Programm so umschreiben das es die Daten aus einer Datei liest. Die Werte sind korrekt:
    zb:
    SRCSEQ = 000100
    SRCDAT = 060919
    SRCDTA = ' A CCSID(273)'

    Jedoch bekomme ich die Meldung wenn ich mir die erstellte Datei anschaue das die Folgenummern nicht korrekt angeordnet sind und sie neu angeordnet werden(Doppelte oder nicht aufsteigende Folgenummer. Sätze wurden neu angeordnet.). Das Änderungsdatum wird garnicht eingetragen. (000000)

    Werden die führenden '0' bei einem Move weggelassen? (Move weil ich die als Char vorliegenden Zahlen wieder in P umwandeln will)

    Beim Schreiben in die Datei gibt es keine Fehlermeldung, ein CRTPF ist jedoch nicht möglich bis ich manuell in die Datei gehe, wobei laut meldung SRCSEQ neu geordnet wird, und etwas ändere um SRCDAT zu setzen.

    Der Write sieht so aus:

    PHP-Code:
    DCMDREC           DS            92    
    DSRCSEQ                          6P 2 
    DSRCDAT                          6P 0 
    DSRCDTA                         80A   

    C                   move      seq           srcseq
    C                   move      dat           srcdat
    C                   
    eval      srcdta dta        

    C                   write     dds           cmdrec 

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    MOVE überträgt rechtsbündig genau so viele Stellen wie das Quellfeld lang ist, maximal jedoch so viele Stellen wie das Zielfeld lang ist.
    Bei einer kürzeren Übertragung bleibt der Rest des Feldes stehen.

    Für numerische Übertragung nimmt man Z-ADD oder EVAL, was dann auch Kommagerecht passiert.

    Desweiteren sind deine Felder falsch definert:
    SRCSEQ/SRCDAT sind vom Typ S (gezont).

    Es wird deswegen kein Fehler ausgelöst, weil das Schreiben der Datei ungeprüft akzeptiert wird.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Sep 2006
    Beiträge
    132
    Zitat Zitat von Fuerchau
    MOVE überträgt rechtsbündig genau so viele Stellen wie das Quellfeld lang ist, maximal jedoch so viele Stellen wie das Zielfeld lang ist.
    Bei einer kürzeren Übertragung bleibt der Rest des Feldes stehen.

    Für numerische Übertragung nimmt man Z-ADD oder EVAL, was dann auch Kommagerecht passiert.

    Desweiteren sind deine Felder falsch definert:
    SRCSEQ/SRCDAT sind vom Typ S (gezont).

    Es wird deswegen kein Fehler ausgelöst, weil das Schreiben der Datei ungeprüft akzeptiert wird.
    Z-Add hatte ich schon probiert. Also nach meinem Move einen z-add.

    Ich habe gerade versucht die Datei per Hand umzuwandeln und mir dann das SF angeschaut. Anscheinend wird weder SRCSEQ noch SRCDAT korrekt geschrieben:

    PHP-Code:
       -       A                                      CCSID(273)                             .  .j¤ 
    Ist meine Übergabe SRCSEQ SRCDAT SRCDTA dann in der Reihenfolge überhaupt richtig? Weil es bei dem SF ja SRCSEQ SRCDTA und dann SRCDAT ist.

    EDIT: Geschafft es geht. Habe die Datei aus der gelesen wird neu definiert, P durch S ersetzt(sowohl in der Datei als auch im Programm) und jetzt geht es.

    Vielen Danke für die Hilfe!

  6. #6
    Registriert seit
    Sep 2006
    Beiträge
    132
    Hallo,

    diesmal geht es nicht um das Schreiben einer DDS Datei sondern das Lesen einer solchen.
    Ich habe den Namen eines Feldes auf das Referiert wird und will nun aus der referenzierten Datei die Länge, die Dezimalstellen und die Art dieses Feldes wissens. Sobald ich die SRCDTA habe kann ich dies ja über Substring herausfinden.

    Dazu hätte ich aber ein paar Fragen:
    1. Kann ich über einen einfachen read aus dieser Datei lesen und die Daten in SRCSEQ SRCDTA und SRCDAT schreiben lassen? Wie müsste dieser read aussehen? (Ein Beispiel wäre sehr freundlich)

    2. Brauche ich dann in meinem CL Programm 2 OVRDBF?

    Gruß Martin

    EDIT:
    Tut mir Leid bin schon über was gestolpert, sollte jetzt funktionieren.(Kann ich erst morgen testen)
    PHP-Code:
         C                   open      reftab
         C                   read      REFTAB        cmdrec
         C                   dow       NOT 
    %eof(reftab)
         
    C                   eval      name2 = %subst(srcdta:19:10)
         
    C                   if        name=name2
         C                   
    eval      laenge = %subst(srcdta:30:4)
         
    C                   eval      art = %subst(srcdta:35:1)
         
    C                   eval      dec = %subst(srcdta:36:2)
         
    C                   endif 
         
    C                   read      REFTAB        cmdrec
         C                   enddo
         C                   close     reftab 

  7. #7
    Registriert seit
    Sep 2006
    Beiträge
    162
    Wie du schon schreibst, du brauchst im CL ein OVRDBF. Ansonsten ist es wie beim schreiben.

    Gruß
    DVE

  8. #8
    Registriert seit
    Sep 2006
    Beiträge
    132
    Zitat Zitat von DVE
    Wie du schon schreibst, du brauchst im CL ein OVRDBF. Ansonsten ist es wie beim schreiben.

    Gruß
    DVE
    Danke!

    Gruß Martin .

  9. #9
    Registriert seit
    Sep 2006
    Beiträge
    132
    Hallo,

    anderes Programm aber wieder etwas mit DDS, deshalb wieder dieser Thread. Ich bekomme zz einen Fehler beim Open. Beschrieben ist die Datei so:

    PHP-Code:
    FDDS       O    F   92        Disk    UsrOpn       
    f                                     ExtFile
    (Path)
    f                                     ExtMbr(Mbr
    MBR wird an das Prog übergeben
    PHP-Code:
    CALL       PGM(DDSGENLINEPARM(&ZNAM &FLIB &FFILE &MBR
    und aus 2 Vars setze ich den Pfad zusammen. Das hat bisher immer funktioniert(habe das aus meinem DDS Prog. genommen). Die Datei wird ordnungsgemäß erstellt, der OVR Befehl ist auch i.O.
    Nun bekomme ich aber den Fehler:
    PHP-Code:
    call ddsbasis parm(ddst liba libb ddste test textf textm ZPROG)   
    Datei DDST in Bibliothek liba erstellt.                             
    Teildatei TEST zu Datei DDST in liba hinzugefügt.                   
    Datei          in Bibliothek *LIBL mit Teildatei TEST nicht gefunden
    Fehlernachricht CPF4102 während OPEN angezeigt

    Fehler soll das sein:
    PHP-Code:
    03 Datei nicht vorhandenBibliothek als *LIBL angegeben
    DDSBasis ist ein CL Prog das dann das ILE Prog aufruft. Die Datei ist jedoch erstellt worden.

    Ein andere Fehler ist ein Dezimalstellenfehler. Hier stimmt jedoch die Zeilenangabe nicht. Auf Zeile XYZ steht nur C/EXEC SQL. Kann es sein das er Platz/Leerzeilen also (0010.00 - damit der Code übersichtlicher wird), ignoriert und sich die Zeilenangabe dadurch verändert?

    Gruß Martin

    EDIT: Dateifehler behoben. Dafür gibts jetzt einen andren:
    Er will einen Open auf Datei DDS machen, welche aber schon auf ist. Der einzige Open den ich mache ist jedoch der hier:
    PHP-Code:
    C                   eval      Path FLib+'/'+FFile 
    C                   
    eval      Path = %trim(Path)    
    C*                  close     dds                   
    C                   open      dds                   
    C                   
    eval      datnam=FFile          
    C                   exsr      fill                  
    C                   exsr      head                  
    C                   exsr      rec                   
    C                   exsr      Line                  
    C                   close     dds                   
    C                   
    return 
    In den Untermethoden werden nur Writes gemacht um die Datei zu erstellen.

  10. #10
    Registriert seit
    Sep 2006
    Beiträge
    132
    Hallo,

    (Ja ich bringe diese Thema wieder mal hoch. ) Ich hätte eine Frage zum return bei CL und zwar steht im Programming Guide das man über diesen Return keine Paramater zurückgeben kann. (Insofern ich mich nicht verlesen habe.) Ich würde jedoch gerne wissen ob das CL Programm das ich von VARPG aufrufe alle Dateien richtig erstellt hat, oder ob etwas schiefgegangen ist und die halb erstellten Dateien wieder gelöscht wurden.

    Da ich beim Return ja anscheinend nichts übergeben kann wie kann ich das sonst überprüfen um dem User eine Rückmeldung geben zu können ob alles i.O. ist oder ob etwas schiefgegangen ist.

    Gruß Martin

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Alle Parameter beim CLP sind per Reference.
    Das CLP kann diese verändern, der Inhalt steht dann im rufenden Programm.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  12. #12
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Hallo,

    für die Rückgabe von Fehlern hat OS400 einen speziellen Mechanismus: man sendet einfach per API eine Escape Message, das kommt sogar beim SBMJOB noch beim Submitter an.

    mfg

    Dieter Bender

    Zitat Zitat von Squall
    Hallo,

    (Ja ich bringe diese Thema wieder mal hoch. ) Ich hätte eine Frage zum return bei CL und zwar steht im Programming Guide das man über diesen Return keine Paramater zurückgeben kann. (Insofern ich mich nicht verlesen habe.) Ich würde jedoch gerne wissen ob das CL Programm das ich von VARPG aufrufe alle Dateien richtig erstellt hat, oder ob etwas schiefgegangen ist und die halb erstellten Dateien wieder gelöscht wurden.

    Da ich beim Return ja anscheinend nichts übergeben kann wie kann ich das sonst überprüfen um dem User eine Rückmeldung geben zu können ob alles i.O. ist oder ob etwas schiefgegangen ist.

    Gruß Martin
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Similar Threads

  1. ILE RPG / SQL Füllen einer Feldgruppe
    By homue in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 18-07-07, 16:47
  2. Problem mit Java-Methoden Aufruf aus ILE RPG?
    By Stoeberl in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 10-01-07, 10:58
  3. ILE RPG und dynamisches Array
    By Squall in forum NEWSboard Programmierung
    Antworten: 9
    Letzter Beitrag: 10-10-06, 08:53
  4. Return ILE RPG
    By Squall in forum IBM i Hauptforum
    Antworten: 31
    Letzter Beitrag: 28-09-06, 17:53
  5. Rechnen mit Datumsfeldern in ILE RPG
    By Angela in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 22-08-06, 10:11

Berechtigungen

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