[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Aug 2001
    Beiträge
    2.943
    Wie willst Du es denn andrucken, mit oder ohne Trennzeichen?
    Ist das Feld alpha oder numerisch?

    Code:
    /Free 
       MyCharDate = %Char(%Date(NumDate: *ISO): *EUR); //TT.MM.JJJJ
       MyNumDate = %Dec(%Date(NumDate: *ISO): *EUR); //TTMMJJJJ
    /End-Free
    MyCharDate ist 10A
    MyNumDate ist 8,0

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  2. #2
    Registriert seit
    Aug 2012
    Beiträge
    18
    Danke Birgitta.
    Das Feld ist numerisch, und trennen wollte ich es per EDTCDE in der printerfile.

    Probiere es jetzt mal aus

  3. #3
    Registriert seit
    Aug 2012
    Beiträge
    18
    Ich habe es jetzt mal so reingeschrieben:

    ZZDATE = %dec(%Date(SKBDAT: *ISO): *EUR);

    ZZDATE ist intern mit 8S 0 deklariert
    SKBDAT ist das Feld in der physical file, welches die Zahlen enthält.

    Fehler beim programmabruf:
    Darums-, Zeit- oder Zeitmarkenwert ist ungültig.

    Kann es sein, das dies nicht funktionieren kann, weil SKBDAT ein beliebiges 8S 0 num Feld ist, wo einfach Daten wie "20121011" per upddta reingeschrieben worden ?

  4. #4
    Registriert seit
    Apr 2005
    Beiträge
    385
    Also man kann das auch anders machen

    D DAT1 S D DATFMT(*ISO)
    D DAT2 S D DATFMT(*EUR)

    MOVEL SKBDAT DAT1
    MOVEL DAT1 DAT2
    MOVE DAT2 ZZDATE

    Wichitg ist dafür nur das in SKBDAT gültige Werte enthält also 0 oder 20120231 wird nicht funktionieren?

    Desweiteren würde ich dir empfehlen, das ZZDATE nicht num. zu definieren sondern 10A und dann DAT2 über die Funktion %CHAR.

    Ganz billige Alternative über Datenstrukturen. Geht immer

  5. #5
    Registriert seit
    Aug 2012
    Beiträge
    18
    Das sieht schonmal gut aus, danke.

    Aber du sagst das Werte wie "0" oder "20121011" nicht funktionieren würden ?

    Das Problem ist ja, das SKBDAT genau diese Werte enthält

    Also in SKBDAT stehen halt die Daten im Format 20121011, welche ich gerne in 11102012 hätte....

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.943
    Zitat Zitat von Jokersams Beitrag anzeigen
    Fehler beim programmabruf:
    Darums-, Zeit- oder Zeitmarkenwert ist ungültig.
    Du kannst ein numerisches Feld auf ungültige Datumswerte prüfen (OpCode TEST(DE) ).

    Einfacher ist es jedoch ungültige Datumswerte über eine Monitor-Group zu handeln. Das klappt sowohl bei den Built-In-Funktionen als auch bei den MOVE-Befehlen

    Code:
     /Free
       Monitor;
         MyNumDate = %Dec(%Date(NumDatum: *ISO): *EUR);
       On-Error;
         //Ungültiges Datum
       EndMon;
     /End-Free
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  7. #7
    Registriert seit
    Jan 2007
    Beiträge
    1.023
    Versuchs mal so ...
    Nimm Brigitta's Beispiel


    Code:
    /Free 
       MyCharDate = %Char(%Date(NumDate: *YYMD): *EUR); //TT.MM.JJJJ
       MyNumDate = %Dec(%Date(NumDate: *YYMD): *EUR); //TTMMJJJJ
    /End-Free
    Anstelle der *ISO Definition schreibst Du *YYMD rein.
    kf

  8. #8
    Registriert seit
    Aug 2012
    Beiträge
    18
    Was soll das YYMD denn genau bewirken ?
    Bekomm jedenfalls hier die Meldung, dass das Token ungültig ist und ein Operand erwartet, aber nicht gefunden wurde...

    RPG ist schon anstrengend :>

    Danke für die Antworten

  9. #9
    Registriert seit
    Jan 2007
    Beiträge
    1.023
    Sorry, vergiss das obige posting - *yymd betrifft CL.

    Definiere ein Feld z.b. D
    D datum s d datfmt(*iso)

    Move dein Datum in dieses Feld und verwende Birgittas Beispiel. Das sollte so funktionieren. Bei mir tut es jedenfalls.
    kf

  10. #10
    Registriert seit
    May 2002
    Beiträge
    1.122
    Nimm die Variante von ExAzubi und packe ein IF darum

    If SKBDAT > *Zeros
    MOVEL SKBDAT DAT1
    MOVEL DAT1 DAT2
    MOVE DAT2 ZZDATE
    Else
    Eval ZZDATE =*Zeros
    EndIf

  11. #11
    Registriert seit
    Apr 2005
    Beiträge
    385
    Ich habe nciht geschrieben 20121011 sondern 20120231 !!

    Denn der 31.02.2012 ist kein gültiges Datum.

    Am besten noch vorher eine Monitor-Group drumherum, dann kann ja nichts passieren!

  12. #12
    Registriert seit
    Aug 2012
    Beiträge
    18
    Ah, ok... tut mir leid.
    Anscheinend nur flüchtig drübergeschaut
    Habs jetzt mit den Datenstrukturen gemacht, funktioniert auch soweit.

    Danke an alle

Similar Threads

  1. SQL: Aus mehreren Feldern ein Datum erkennen
    By I0N in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 21-11-06, 13:44
  2. SQL DATUM
    By steven_r in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 20-11-06, 19:37
  3. Datum in Query
    By heini in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 30-09-06, 11:10
  4. Datum überlebt ODBC Transfer auf Excel nicht
    By jjagi in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 07-07-06, 09:29
  5. Datum sicher in *EUR wandeln
    By JonnyRico in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 27-04-06, 13:45

Berechtigungen

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