-
Ich hab da auch so meine Probleme ... gehabt?
Hallo zusammen!
1. Frage: Wo kann ich denn das Format 'L' zuweisen? Ist es nicht so, daß man 'D' oder 'T' in den Sourcebestimmungen definiert und dies erst beim Umwandeln zum Datenformat 'L' gemacht wird?
Und nun mein größeres Problem: Mir gelingt es nicht, ein Datumsfeld mit einem Literal zu vergleichen oder dem Datumsfeld ein Literal zuzuweisen, z.B.
H DatFmt(*Eur.)
D W1AUDT D DatFmt(*Eur.)
C Eval W1AUDT='30.10.2004'
Das meckert der Compiler wegen unterschiedlicher Formate an!
Erst über ein numerisches und ein Datums-Hilfsfeld
und unter Anwendung der Funktion %Date ist es mir gelungen,
mein Datum mit einem festen Wert zu vergleichen.
Geht das nicht auch einfacher?
Mit herzlichen Grüßen aus Hamburg
Werner
Hier sind die betreffenden Stellen aus der Umwandlungsliste
(es handelt sich um ein SQLRPGLE-Programm):
1. Versuch:
5722WDS V5R2M0 020719 RN IBM ILE RPG EX1WRK/LG0010R TLZ2 30.10.04 04:26
1 H DatFmt(*Eur.) DatEdiT(*DMY.)
DSPF
274=I *EUR.D 18 27 F2AUDT Auftragsdatum
983 C* Datumsprüfung: Auftragsdatum
984 C If F2AUDT <> *Loval
985 C and (F2AUDT < '01.01.1990' or
986 C F2AUDT > '31.12.2050')
987 C Eval M0MSGT = %Trim(M0MSGT) +
988 C ' * Auftragsdatum!'
989 C Eval *In81 = *On
990 C EndIf
*RNF7421 30 985 068200 Operanden sind mit der Art des Operators nicht kompatibel.
*RNF7421 30 986 068300 Operanden sind mit der Art des Operators nicht kompatibel.
2. Versuch:
1 H DatFmt(*Eur.) DatEdiT(*DMY.)
124 D W1MIEU D DatFmt(*Eur.)
125 D W1MXEU D DatFmt(*Eur.)
991 C* Datumsprüfung: Auftragsdatum
992 C Eval W1MIEU = '01.01.1990'
993 C Eval W1MXEU = '31.12.2050'
994 C If F2AUDT <> *Loval
995 C and (F2AUDT < W1MIEU or
996 C F2AUDT > W1MXEU)
997 C Eval M0MSGT = %Trim(M0MSGT) +
998 C ' * Auftragsdatum!'
999 C Eval *In81 = *On
1000 C EndIf
*RNF7416 30 992 068900 Die Arten der Operanden auf der rechten und linken Seite des Ausdrucks in der Operation EVAL stimmen nicht überein.
*RNF7416 30 993 069000 Die Arten der Operanden auf der rechten und linken Seite des Ausdrucks in der Operation EVAL stimmen nicht überein.
3. Versuch:
1 H DatFmt(*Eur.) DatEdiT(*DMY.)
122 D W1MIND 8 0 Inz(01011990)
123 D W1MAXD 8 0 Inz(31122049)
124 D W1MIEU D DatFmt(*Eur.)
125 D W1MXEU D DatFmt(*Eur.)
So klappt es:
1001 C* Datumsprüfung: Auftragsdatum
1002 C Eval W1MIEU = %Date(W1MIND:*Eur)
1003 C Eval W1MXEU = %Date(W1MAXD:*Eur)
1004 C If F2AUDT <> *Loval
1005 C and (F2AUDT < W1MIEU or
1006 C F2AUDT > W1MXEU)
1007 C Eval M0MSGT = %Trim(M0MSGT) +
1008 C ' * Auftragsdatum!'
1009 C Eval *In81 = *On
1010 C EndIf
 Zitat von Fuerchau
Das Datumsformat wird in der H-Bestimmung beschrieben oder als Erweiterung in der D-Bestimmung (das Standardformat sieht man ggf. in der Umwandlung).
h datfmt(*iso)
d myDate L [datfmt(*iso)]
c/free
myDate = '2004-07-21';
/end-free
In RPG (OPM) werden Datumsfelder nicht unterstützt !
Werner Kakuschky
-
Hallo,
hier einige Erklärungen:
1. Wie wird ein Datums- oder Zeit-Feld definiert?
1.1. im DDS mit L für Datum, T für Zeit und Z für Zeitmarke jeweils ohne Längenangabe
1.2. in RPG mit D für Datum, T für Zeit und Z für Zeitmarke jeweils ohne Längenangabe
2. Welches Datums-Format wird in RPG verwendet?
2.1. Das Format, das in den D-Bestimmungen bei der Definition des Datums- oder Zeitfeldes im Schlüssel-Wort DATFMT angegeben wurde.
2.2. Wurde in den D-Bestimmungen das Schlüssel-Wort DATFMT nicht angegeben, gilt das Datumsformat, das im Schlüssel-Wort DATFMT in den H-Bestimmungen angegeben wurde.
2.3. Wurde das Schlüssel-Wort DATFMT weder in den D- noch in den H-Bestimmungen angegeben, wird das Datums-Format *ISO verwendet.
Für die Zeit gilt das Ganze analog nur mit dem Schlüssel-Wort TIMFMT.
Für Zeitmarken gibt es im Moment nur das ISO-Format.
3. Wie wird ein Datums-Feld initialisiert?
Im Gegensatz zu SQL kann RPG eine alphanumerische Repräsentation eines Datums oder einer Zeit als Datum oder Zeit erkennen und verwenden.
Aber es ist nicht notwendig Built-in-Funktionen zu benutzen.
Bei Datums-Feldern genügt ein D vor das Literal zu stellen. Der String muss allerdings das Format, das in den H-Bestimmungen angegeben wurde oder ,sofern das Schlüssel-Wort DATFMT nicht in den H-Bestimmungen angegeben wurde, im Format *ISO aufbereitet sein.
Beispiel:
PHP-Code:
H DATEDIT(*DMY) DatFmt(*Eur)
*--------------------------------------------------------
D DateIso S D DatFmt(*Iso) inz(D'30.10.2004')
D DateDMY S D DatFmt(*DMY-)
*--------------------------------------------------------
/Free
If DateIso >= D'15.10.2004';
Dsply DateIso;
EndIf;
DateDMY = D'30.10.2004';
If DateDMY = DateIso;
Dsply DateDMY;
EndIf;
*InLR = *On;
/End-Free
Das gilt analog auch für die Zeit-Felder. Bei Zeit-Literalen muss ein T vorangestellt werden.
PHP-Code:
/Free
MyTime = T'23:47:17';
/End-Free
Werden Zeitmarken-Literale verwendet, muss ein Z vorangestellt werden:
PHP-Code:
/Free
MyTimeStamp = Z'2004-10-30-11.33.44.000000';
/End-Free
Birgitta
-
Kaum macht man's richtig - dann klappt's!
Danke vielmals, Birgitta!
1. Es ist also das dem Literal vorangestellte D, das den Unterschied ausmacht.
2. Jetzt muß ich doch auch einmal PHP testen, aber wie verhindere ich, daß die Leerzeichen aus meinem mit Ctrl-V eingefügten Code komprimiert werden, und warum mischt er mir die Farben so durcheinander ?
PHP-Code:
1 H DatFmt(*Eur.) DatEdiT(*DMY.) Eingabebestimmungen DSPF 274=I *EUR.D 18 27 F2AUDT Auftragsdatum 124 D W1MIEU D DatFmt(*Eur.) Inz(D'01.01.1990') 125 D W1MXEU D DatFmt(*Eur.) Inz(D'31.12.2049') 1001 C* Datumsprüfung: Auftragsdatum 1004 C If F2AUDT <> *Loval 1005 C and (F2AUDT < W1MIEU or 1006 C F2AUDT > W1MXEU) 1007 C Eval M0MSGT = %Trim(M0MSGT) + 1008 C ' * Auftragsdatum!' 1009 C Eval *In81 = *On 1000 C EndIf
Beste Grüße
Werner.
Werner Kakuschky
-
hmm, ich muss das thema noch einmal auf nehmen.
ich habe eine Datei mit SQL erstellt. Diese beinhaltet ein Datumsfeld.
PHP-Code:
Create Table LARS/EHStammdaten (
....
"EINDATUM" for Column EHS1BEL date not Null,
....
In einem RPG-Proggi wird diese Datei aus einer anderen befüllt. In dieser ist das Datum 8stellig num angelegt und das Datum steht in der Form JJJJMMTT darin.
Wie bekomme ich nun diese Feld elegant in das Datumsfeld ??
Gruß Ronald
-
mydate = %date(yydate:*CYMD0);
-
hm, konnte ich so nicht wandeln. nur mit einem %EditC
PHP-Code:
Eval EHS1BEL = %Date(%EditC(kd1bel:'X'):*CYMD0 )
nun bekomme ich einen Datums-/Zeitmarkenfehler.
im feld kd1bel steht 19900520
-
Dann mach es mit %editw:
EHS1BEL = %Date(%EditW(kd1bel:'0____-__-__'):*ISO)
-
So klappt es:
d TestNum s 8 0 inz(19900522)
d TestDate s d
c/free
TestDate = %date(TestNum);
return;
/end-free
Der 2. Parameter von %date gibt das Ziel- und nicht das Quellformat an !!
Similar Threads
-
By robertki in forum NEWSboard Programmierung
Antworten: 25
Letzter Beitrag: 19-01-07, 08:42
-
By Stoeberl in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 10-01-07, 10:58
-
By jth in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 21-12-06, 11:13
-
By harkne in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 01-06-06, 12:42
-
By loeweadolf in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 01-06-06, 09:43
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