[NEWSboard IBMi Forum]

Thema: OPNQRYF

  1. #1
    Registriert seit
    Aug 2012
    Beiträge
    9

    OPNQRYF

    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

  2. #2
    Registriert seit
    Nov 2003
    Beiträge
    2.403
    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

  3. #3
    Registriert seit
    Jan 2003
    Beiträge
    759
    ...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)

  4. #4
    Registriert seit
    Aug 2012
    Beiträge
    9
    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

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Numerische Variablen musst du per CHGVAR erst mal in Character umwandeln um sie mit CAT zu verarbeiten.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  6. #6
    Registriert seit
    Aug 2012
    Beiträge
    9
    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

  7. #7
    Registriert seit
    Aug 2012
    Beiträge
    9
    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?!?!

  8. #8
    Registriert seit
    Nov 2003
    Beiträge
    2.403
    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.

  9. #9
    Registriert seit
    Aug 2012
    Beiträge
    9
    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

Similar Threads

  1. Denkfehler bei OPNQRYF?
    By Starocotes in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 20-03-12, 14:17
  2. Summenfunktion mit OPNQRYF
    By svit in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 15-03-12, 07:14
  3. OPNQRYF mit gleichen Dateien
    By olafu in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 26-04-05, 08:57
  4. Datumsvergleich im OPNQRYF
    By Jenne in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 07-06-04, 12:19
  5. Suche über mehrere Dateien mit opnqryf
    By programmer in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 01-06-04, 11:55

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •