PDA

View Full Version : OPNQRYF



MarkowP
29-08-12, 15:15
Hallo Zusammen,

ich habe in der OPNQRYF das Problem, das das Ergebnis nicht den Abfragewerten entspricht,
welche ich über die Abfrageauswahl hinterlegt habe - hier die relevanten Zeilen aus dem
CL-Programm


DCL VAR(&PDATV) TYPE(*CHAR) LEN(8) +
VALUE('20120822')
DCL VAR(&PDATV_N) TYPE(*DEC) LEN(8 0)


CHGVAR VAR(&PDATV_N) VALUE(&PDATV)


Variable . . . . . . . . . . . . . . . : &PDATV_N
Art . . . . . . . . . . . . . . . . . : GEPACKT
Länge . . . . . . . . . . . . . . . . : 8 0
' 20120822'

Das Feld IWIDDT aus Datei DIW7PF ist definiert mit S 8 0 (=gezont)


1) OPNQRYF FILE((DIW7PF)) QRYSLT('IWIDDT *EQ PDATV_N') +
MAPFLD((PDATV_N IWIDDT *DEC 8 0))

Es findet hier keine Dateneinschränkung statt - warum weiß ich nicht?!?!

2) OPNQRYF FILE((DIW7PF)) QRYSLT('IWIDDT *EQ 20120822') +
MAPFLD((PDATV_N IWIDDT *DEC 8 0))

Hier werden die richtigen Daten selektiert, so wie ich es auch gerne unter Punkt 1 hätte.

Was mache ich bitte falsch?!?!

Schöne Grüße aus Geretsried
Michael

Pikachu
29-08-12, 16:20
Probier mal so:

OPNQRYF FILE((DIW7PF)) QRYSLT('IWIDDT *EQ ' *CAT &PDATV) ...

Siehe hier unter Example 1, Notes 5.
Selecting records using the Open Query File (OPNQRYF) command (http://publib.boulder.ibm.com/infocenter/iseries/v5r3/topic/dbp/rbafodynsrsex.htm#rbafodynsrsex)

RobertMack
29-08-12, 16:21
...aus dem Gedächtnis, hoffe es funktioniert so:

CHGVAR QRY VALUE('(IWIDDT *EQ' *BCAT &PDATV_N *TCAT ')')

OPNQRYF FILE((DIW7PF)) OPTION(*ALL) QRYSLT(&QRY)
MAPFLD((PDATV_N IWIDDT *DEC 8 0))

OVRDBF FILE(DIW7PF) SHARE(*YES)

MarkowP
30-08-12, 08:03
Lieber Robert,

vielen Dank für deine Antwort

CHGVAR QRY VALUE('(IWIDDT *EQ' *BCAT &PDATV_N *TCAT ')')

Funktioniert leider nicht, da folgende Fehler auftraten
* CPD0712 30 Art von Operand für Operator ungültig.
* CPD0711 30 Art der Ausdrucksoperanden unterschiedlich.

Gruß Michael

Fuerchau
30-08-12, 08:17
Numerische Variablen musst du per CHGVAR erst mal in Character umwandeln um sie mit CAT zu verarbeiten.

MarkowP
30-08-12, 08:24
Lieber Pikachu,

funkioniert leider nicht - erhalte dabei folgende Nachricht(en)

CPD3129 Fehlender Operand in Ausdruck im Parameter QRYSLT.
CPF9899 Fehler während Befehlsverarbeitung

Nochmals zu vielleicht zum besseren Verständnis - die Datei DIW7PF enthält das Feld IWIDDT, gezont S 8 0, in welchem Datumseinträge in Form von YYYYMMDD stehen.

Mittels OPNQRYF möchte ich über das Feld &PDATV (=Character) bzw. dem entsprechenden Feld &PDATV_N (=Numerisch) nur ein bestimmtes Datum aus der Datei DIW7PF, Feld IWIDDT, selektieren.

Gruß Michael

MarkowP
30-08-12, 08:29
Hallo,

wie Du in meinem Beispiel ersehen kannst, gehe ich wie folgt vor:

DCL VAR(&PDATV) TYPE(*CHAR) LEN(8) +
VALUE('20120822') -> Übergabeparameter
DCL VAR(&PDATV_N) TYPE(*DEC) LEN(8 0)

Umsetzung von Character in numerisch
CHGVAR VAR(&PDATV_N) VALUE(&PDATV)

Das Feld IWIDDT aus Datei DIW7PF ist definiert mit S 8 0 (=gezont), da ich doch ansonsten nicht anders vergleichen kann?!?!

OPNQRYF FILE((DIW7PF)) QRYSLT('IWIDDT *EQ PDATV_N') +
MAPFLD((PDATV_N IWIDDT *DEC 8 0))

Funktioniert so nicht - weshalb nicht?!?!

Pikachu
30-08-12, 08:40
So wie das aussieht vergleichst du IWIDDT mit IWIDDT.

Was du brauchst ist der Inhalt der CL-Variablen. Du mußt also eine Zeichenkette zusammenbauen und als Parameter übergeben, damit der Inhalt der CL-Variablen &PDATV im Parameter QRYSLT mitgegeben wird.

Probier nochmal mit:

... QRYSLT('IWIDDT *EQ ' *CAT &PDATV) ...

Hochkommas und &PDATV (CL-Variable *CHAR) beachten, und das Leerzeichen nach *EQ.

MarkowP
30-08-12, 09:00
Hallo Pikachu,

vielen Dank - jetzt habe ich den gewünschten Erfolg erzielt. Man muß ganz genau auf die Hochkommatas achten, d.h. die in der Bedienerführung mitgegebenen Hochkommatas stimmten in diesem Fall nicht.

Nochmals vielen Dank für Deine Unterstützung

Gruß Michael