-
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:
PHP-Code:
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:
PHP-Code:
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:
PHP-Code:
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 ??
PHP-Code:
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:
PHP-Code:
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:
PHP-Code:
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?
-
hab mir die SQL-Fehlermeldung SQL0187 (WRKMSGF QSQLMSG) mal etwas genauer angeschaut:
PHP-Code:
System: BHSWHR
Nachrichten-ID . . . . . . . : SQL0187
Nachrichtendatei . . . . . . : QSQLMSG
Bibliothek . . . . . . . . : QSYS
Nachricht . . . : Verwendung der gekennzeichneten Dauer ungültig.
Ursache . . . . : Einer der folgenden Fehler trat auf:
-- Eine gekennzeichnete Dauer ist angegeben, ist aber nicht der Operand
des Additions- oder Subtraktionsoperators.
-- Eine gekennzeichnete Dauer von Jahren, Monaten oder Tagen ist als
Additions- oder Subtraktionsoperand angegeben, der andere Operand ist jedoch
kein Datum und keine Zeitmarke.
-- Eine gekennzeichnete Dauer von Mikrosekunden ist als Additions- oder
Subtraktionsoperand angegeben, der andere Operand ist jedoch keine Uhrzeit
und keine Zeitmarke.
-- Eine gekennzeichnete Dauer von Stunden Minuten oder Sekunden ist als
Additions- oder Subtraktionsoperand angegeben, der andere Operand ist jedoch
keine Zeitmarke.
-- Eine gekennzeichnete Dauer ist als linker Operand einer Subtraktion
angegeben.
-- Der für die gekennzeichnete Dauer angegebene Wert ist nicht numerisch.
Fehlerbeseitigung: Verwendung der gekennzeichneten Dauer korrigieren. Die
Anforderung wiederholen.
Kann es sein, daß das SQL-Statmant (Addition von 1 Tag) in einem SQLRPG womöglich gar nicht funkt?
-
Hallo,
hättest dir mal besser die Postings von Baldur oder Kampi4 ansehen sollen
C/EXEC SQL
C+ SET :NEWDAT = :MYDATE + 1 DAYS
C/END-EXEC
Dieter Bender,
der auch froh ist, dass heute Freitag ist
edit: und jetzt das DAYS gesehen hat
 Zitat von muadeep
hab mir die SQL-Fehlermeldung SQL0187 (WRKMSGF QSQLMSG) mal etwas genauer angeschaut:
PHP-Code:
System: BHSWHR
Nachrichten-ID . . . . . . . : SQL0187
Nachrichtendatei . . . . . . : QSQLMSG
Bibliothek . . . . . . . . : QSYS
Nachricht . . . : Verwendung der gekennzeichneten Dauer ungültig.
Ursache . . . . : Einer der folgenden Fehler trat auf:
-- Eine gekennzeichnete Dauer ist angegeben, ist aber nicht der Operand
des Additions- oder Subtraktionsoperators.
-- Eine gekennzeichnete Dauer von Jahren, Monaten oder Tagen ist als
Additions- oder Subtraktionsoperand angegeben, der andere Operand ist jedoch
kein Datum und keine Zeitmarke.
-- Eine gekennzeichnete Dauer von Mikrosekunden ist als Additions- oder
Subtraktionsoperand angegeben, der andere Operand ist jedoch keine Uhrzeit
und keine Zeitmarke.
-- Eine gekennzeichnete Dauer von Stunden Minuten oder Sekunden ist als
Additions- oder Subtraktionsoperand angegeben, der andere Operand ist jedoch
keine Zeitmarke.
-- Eine gekennzeichnete Dauer ist als linker Operand einer Subtraktion
angegeben.
-- Der für die gekennzeichnete Dauer angegebene Wert ist nicht numerisch.
Fehlerbeseitigung: Verwendung der gekennzeichneten Dauer korrigieren. Die
Anforderung wiederholen.
Kann es sein, daß das SQL-Statmant (Addition von 1 Tag) in einem SQLRPG womöglich gar nicht funkt?
Similar Threads
-
By Joe in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 26-08-05, 09:11
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks