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 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 !