View Full Version : Datumsproblem
Hallo *all
Ist es möglich in einem RPG (nicht RPGLE) ein 8 stelliges Feld (in dem ein Datum "31012006" o. auch "20060131") um einen Tag zu erhöhen, so daß dann dementsprechend auf Februar geändert wird!
(vielleicht mit SQL in einem "SQLRPG")
RPGLE (ILE) bzw. SQLRPGLE wär mir klar nur bei RPG bzw. SQLRPG weiß ich leider nicht weiter!
Fals ja, wie?
Native RPG gehts nur mit der alten bekannten Rechenmethode:
Tag = Tag+1
If Tag>Tage(Monat)
:
:
In SQL:
set :mynewdate = :olddate + 1 days
newdate und olddate sind vorher in ISO-Format zu bringen (YYYY-MM-DD) und hinterher kannst du das ja wieder in eine Zahl umformatieren.
und wie bekomm ich das (im RPG) in das entsprechende Format?
Also eine Zahl im RPG in eine Struktur zu stellen ist doch wohlnicht das Problem:
IMYDATE DS
I 1 40MYYEAR
I I '-' 5 5
I 6 7 20MYMON
I I '-' 8 8
I 9 10 MYDAY
Nun nur noch das Datum in diese Struktur zerlegen und hinterher wieder mit Einzelbefehlen zusammenbauen:
MyNumDate = MYYEAR * 10000 + MYMON * 100 + MYDAY
Diese Berechnung überlasse ich nun dir.
das mit der Struktur war mir schon klar!
Nur beim Umwandeln bekomme ich leider immer diesen Fehler:
Satz *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8
362 C+ SET :NEWDAT = MYDATE + 1 DAYS
5722ST1 V5R3M0 040528 SQL-RPG-Programm erstellen SIBESMLAUX
DIAGNOSENACHRICHTEN
MSG ID WTK SATZ TEXT
SQL0104 30 362 Position 23 Token MYDATE ungültig. Gültige Token: :.
Nachrichtenzusammenfassung
Gesamt Info Warnung Fehler Wertigk. Beendigung
1 0 0 0 1 0
Die Anweisungen in meinem Programm schauen so aus:
IMYDATE DS
I 1 40YY
I I '-' 5 5
I 6 70MM
I I '-' 8 8
I 9 100DD
C MOVEL*YEAR YY 4
C MOVEL*MONTH MM 2
C MOVEL*DAY DD 2
C/EXEC SQL
C+ SET :NEWDAT = MYDATE + 1 DAYS
C/END-EXEC
Ich würde sagen, dass vor das "mydate" noch ein Doppelpunkt muss. Also so:
C/EXEC SQL
C+ SET :NEWDAT = :MYDATE + 1 DAYS
C/END-EXEC
Mfg KAMPI
Wie wäre es mit eine RPGLE Routine die das Datum um so viele Tage erhöht wie du Lust hast ??
d rtncde s 7
d tage s 7 0
d datum_parm s 8 0
d datum_d s d
d zeit_parm s 6 0
d zeit_t s t
d timestamp s z
c *entry plist
c parm rtncde
c parm tage
c parm datum_parm
c eval rtncde = *blanks
c *iso test(d e) datum_parm
c if not %error
c *iso move datum_parm datum_d
c else
c eval rtncde = '*Error'
c endif
c if rtncde = ' '
c adddur tage:*d datum_d
c movel datum_d datum_parm
c endif
c return
Gruß
DVE
zu DVE
wenn ich es mit RPGLE machen könnte/dürfte würde ich es mit
SQL machen und da wär es mir klar bzw. wärs kein Problem!
zu Kampi4:
das hatte ich auch schon und da gibt's dann folgenden Fehler:
Satz *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8
362 C+ SET :NEWDAT = :MYDATE + 1 DAYS
5722ST1 V5R3M0 040528 SQL-RPG-Programm erstellen SIBESMLAUX
DIAGNOSENACHRICHTEN
MSG ID WTK SATZ TEXT
SQL0312 30 362 Position 24 Variable MYDATE nicht definiert oder nicht
verwendbar.
Nachrichtenzusammenfassung
Gesamt Info Warnung Fehler Wertigk. Beendigung
1 0 0 0 1 0
Fehler der Wertigkeitsstufe 30 in Quelle gefunden.
Definiere dazu folgendes:
I DS
I 1 10 MYDATE
Ich denke, dass der SQL-Compiler in diesem Fall die Struktur ablehnt, da es sich nicht um eine Single-Variable handelt.
stimmt daß war die Fehlermeldung!
Aber jetzt bekomme ich folgende Meldung:
Satz *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8
363 C+ SET :NEWDAT = :MYDATE + 1 DAYS
5722ST1 V5R3M0 040528 SQL-RPG-Programm erstellen SIBESMLAUX
DIAGNOSENACHRICHTEN
MSG ID WTK SATZ TEXT
SQL0187 30 363 Position 35 Verwendung der gekennzeichneten Dauer
ungültig.
Nachrichtenzusammenfassung
Gesamt Info Warnung Fehler Wertigk. Beendigung
1 0 0 0 1 0
Wie muß den das Feld NEWDAT definiert sein als 10 alpha oder 10 num. oder auch als DS?