[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte

Hybrid View

  1. #1
    Registriert seit
    Jan 2010
    Beiträge
    83

    ADO und QSYS.QCMDEXC --> Syntaxfehler

    Hallo,
    V5R4, WINXP SP3

    Irgendwo ist beim Befehl QCMDEXC ein Syntaxfehler und den finde ich nicht?

    CallCmd = "STRQMQRY QMQRY(TRUMPFH/TTRWLSVST1) OUTPUT(*OUTFILE) OUTFILE(TRUMPFH/TTRWLSVST1) ALWQRYDFN(*YES) SETVAR((VAR1 " & VAR1 & "))"

    CallCmd = Replace(CallCmd, "'", "''")

    cnn.Execute("CALL QSYS.QCMDEXC ('" & CallCmd & "', " & Format(Len(CallCmd), "0000000000.00000") & ")")


    Fehlermeldung von VBA:
    [IBM][iSeries Access ODBC-Treiber][DB2 UDB]CPF0006 - Im Befehl ist ein Fehler aufgetreten.

    Ich finde den Fehler nicht, trotz der Recherche in diesem Forum.

    Vielen Dank
    Gruss
    Tobias

  2. #2
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Genau dieses Problem hattest du ja schon einmal.
    Hast du denn schon versucht den kompletten Befehl auf der AS/400 abzusetzen? Dann solltest du eine genauere Fehlermeldung erhalten.

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Schau dir das Ergebnis von CallCmd mal an und führe ihn auf einer Kommandozeile der AS/400 aus.
    Ggf. mit F4 mal prompten.
    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

  4. #4
    Registriert seit
    Jan 2010
    Beiträge
    83
    Hallo,

    der Befehl auf der AS400 funktioniert:

    Befehl eingeben und Eingabetaste drücken
    ===> STRQMQRY QMQRY(TRUMPFH/TTRWLSVST1) OUTPUT(*OUTFILE) OUTFILE(TRUMPFH/TTRWLSVST1) ALWQRYDFN(*YES) SETVAR((VAR1 100717))

    Ich übergebe den Wert 100717 als Variable VAR1 (VAR1 ist im Format string):
    SETVAR((VAR1 " & VAR1 & "))".

    CallCmd beinhaltet dann den obigen String (STRQMQRY...)

    Fehler hier:
    cnn.Execute("CALL QSYS.QCMDEXC('" & CallCmd & "', " & Format(Len(CallCmd), "0000000000.00000") & ")")

    [IBM][iSeries Access ODBC-Treiber][DB2 UDB]CPF0006 - Im Befehl ist ein Fehler aufgetreten.

    Die zweite Variable VAR1 scheint der ODBC-Treiber nicht übersetzen zu können. Wie ist denn da falsch?

    Danke.
    Gruss
    Tobias

  5. #5
    Registriert seit
    Jan 2010
    Beiträge
    83
    Hallo,

    der Befehl auf der AS400 funktioniert:

    Befehl eingeben und Eingabetaste drücken
    ===> STRQMQRY QMQRY(TRUMPFH/TTRWLSVST1) OUTPUT(*OUTFILE) OUTFILE(TRUMPFH/TTRWLSVST1) ALWQRYDFN(*YES) SETVAR((VAR1 100717))

    Ich übergebe den Wert 100717 als Variable VAR1 (VAR1 ist im Format string):
    SETVAR((VAR1 " & VAR1 & "))".

    CallCmd beinhaltet dann den obigen String (STRQMQRY...)

    Fehler hier:
    cnn.Execute("CALL QSYS.QCMDEXC('" & CallCmd & "', " & Format(Len(CallCmd), "0000000000.00000") & ")")

    [IBM][iSeries Access ODBC-Treiber][DB2 UDB]CPF0006 - Im Befehl ist ein Fehler aufgetreten.

    Die zweite Variable VAR1 scheint der ODBC-Treiber nicht übersetzen zu können. Wie ist denn da falsch?

    Danke.
    Gruss
    Tobias

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Setz' mal Deinen Variablen-Wert in Hochkommata!

    Auch wenn Dir das nicht logisch scheint, da der Variablen-Wert numerisch ist.

    Aber beim Aufruf von QM-Queries müssen numerische Werte mit Hochkommata über geben werden und bei alphanumerischen Werten muss das ganze in weitere Hochkommata eingebettet werden.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  7. #7
    Registriert seit
    Jan 2010
    Beiträge
    83
    Hallo,

    bringt bei einfachen und doppelten Hochkomma immer noch den selben Fehler CPF0006 (s.o.):

    CallCmd = "STRQMQRY QMQRY(TRUMPFH/TTRWLSVST1) OUTPUT(*OUTFILE) OUTFILE(TRUMPFH/TTRWLSVST1) ALWQRYDFN(*YES) SETVAR((VAR1 ''" & VAR1 & "''" & "))"

    cnn.Execute("CALL QSYS.QCMDEXC('" & CallCmd & "', " & Format(Len(CallCmd), "0000000000.00000") & ")")

    Gruss
    Tobias

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Und nochmal:
    Schau die den Inhalt deiner Variablen CallCmd mal an bevor du den Execute ausführst.
    Irgendwas machst du halt noch falsch.
    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

  9. #9
    Registriert seit
    Jan 2010
    Beiträge
    83
    Hallo,

    die Variable CallCmd hat genau den String, den ich auf der AS400 ausführen möchte. Ich weiß bald nicht mehr, welche Variation ich noch probieren soll.

    Die Variable VAR1 übergibt einen Wert für ein Datumsfeld auf der AS400, welches das Format Decimal(6,0) fordert.

    Gruss
    Tobias

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    CPF0006 bedeutet, dass es wohl noch einen Syntaxfehler gibt.

    Beachte ggf. Klein/Großschreibung.
    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

  11. #11
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... vielleicht ein paar Hinweise zur Vorgehensweise:
    - Schritt 1: Aufruf QCMDEXC mit einfachem OS Command (SNDMSG oder CRTLIB)
    wenn das funzt:
    - Schritt 2: Aufruf QCMDEXC mit STRQMQRY ohne Parameter
    wenn das funzt:
    - Schritt 3: Aufurf QMQRY über QCMDEXC an OS/400 prompt
    wenn das funzt:
    Schritt 4: das was bei dir Schritt 1 war.

    Ansonsten: sich mal mit external stored Procedures befassen; man kann jedes OS/400 Programm als stored Procedure registrieren und dann über SQL Call aufrufen, das Parameter mapping übernimmt dann SQL und man kann auch Infos zurück bekommen.

    Die Parameter Mimik des QM Query kriegt man in diesem Fall kontrollierbarer hin, wenn man eine Parameterdatei (1 Satz mit einem Feld pro Parameter) mit hinzu joined, diese aus dem Programm über ADO füllt und dan den QMQuery aufruft. (Diese Technik empfiehlt sich auch für Stafetten von Queries, die monatlich aufgerufen werden.

    D*B

    Zitat Zitat von padawan Beitrag anzeigen
    Hallo,

    die Variable CallCmd hat genau den String, den ich auf der AS400 ausführen möchte. Ich weiß bald nicht mehr, welche Variation ich noch probieren soll.

    Die Variable VAR1 übergibt einen Wert für ein Datumsfeld auf der AS400, welches das Format Decimal(6,0) fordert.

    Gruss
    Tobias
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  12. #12
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Zitat Zitat von padawan Beitrag anzeigen
    der Befehl auf der AS400 funktioniert:

    Befehl eingeben und Eingabetaste drücken
    ===> STRQMQRY QMQRY(TRUMPFH/TTRWLSVST1) OUTPUT(*OUTFILE) OUTFILE(TRUMPFH/TTRWLSVST1) ALWQRYDFN(*YES) SETVAR((VAR1 100717))
    Solange du nicht den kompletten Befehl (also mit dem CALL QCMD...) auf der Command-Line absetzt, werden wir den wahren Fehler nur erraten können.
    Speichere dir den kompletten Befehl
    "CALL QSYS.QCMDEXC('" & CallCmd & "', " & Format(Len(CallCmd), "0000000000.00000") & ")"
    in eine Variable, lies die mal aus und führe diesen Call 1:1 auf der Maschiene aus. Dann bekommst du im Joblog eventuell mehr Infos!

Similar Threads

  1. MS ado und Prepared Command
    By Asti in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 26-10-06, 09:39
  2. Fehler: SQL0302 Umsetzungsfehler / ado
    By Asti in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 29-08-06, 13:24
  3. strsst -> SB01
    By TARASIK in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 27-06-06, 13:32
  4. Spool -> PDF benötigte Lizenzprogramme
    By cseitz in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 20-06-06, 14:40
  5. Antworten: 3
    Letzter Beitrag: 06-06-06, 15:57

Berechtigungen

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