[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jan 2010
    Beiträge
    83

    ADO und SETVAR bei STRQMQRY

    Hallo,
    V5R4 und ADO

    Ich habe wie in diesem Forum beschrieben in der Qry bei Sätze auswählen eine Variable gesetzt --> WVLDAT LE :VAR1 --> dabei hat das Feld WVLDAT das Format Decimal 6 0

    Folgender Befehl in der Befehlszeile auf der AS400 funktioniert:
    STRQMQRY QMQRY(TRUMPFH/TTRWLSVST1) OUTPUT(*OUTFILE) OUTFILE(TRUMPFH/TTRWLSVST1) ALWQRYDFN(*YES) SETVAR((VAR1 100626))

    Jetzt möchte ich diesen Befehl über ADO aufführen. In ADO habe ich folgendes gemacht, wobei STRQMQRY nicht funktioniert:

    datbb = "26.06.2010"
    t = Left(datbb, 2)
    m = Mid(datbb, 4, 2)
    j = Right(datbb, 2)
    datbb = j & m & t
    'datb = "X'0" & datbb & "C'"
    VAR1 = datb 'VAR1 ist jetzt 100626
    '************************************************* ************
    'Daten holen
    '************************************************* ************
    Dim cnn As ADODB.Connection
    Dim con_str AsString
    Dim CallCmd AsNew ADODB.Command
    cnn = New ADODB.Connection

    VAR99 = "STRQMQRY QMQRY(TRUMPFH/TTRWLSVST1) OUTPUT(*OUTFILE) OUTFILE(TRUMPFH/TTRWLSVST1) ALWQRYDFN(*YES) SETVAR((VAR1 " & VAR1 & "))"
    'anderer Versuch
    'VAR99 = "STRQMQRY QMQRY(TRUMPFH/TTRWLSVST1) OUTPUT(*OUTFILE) OUTFILE(TRUMPFH/TTRWLSVST1) ALWQRYDFN(*YES) SETVAR((VAR1 ('''' *CAT " & VAR1 & " *CAT '''')))"
    ' oder SETVAR((VAR1 ('''' *CAT &VAR1 *CAT '''')))
    con_str = "Driver={iSeries Access ODBC Driver};System=ICHAS;Uid=TRUMPFH;Pwd=tobias;"
    cnn.Open(con_str)
    CallCmd = New ADODB.Command
    OnErrorResumeNext
    CallCmd.CommandText = VAR99
    CallCmd.ActiveConnection = cnn
    CallCmd.Execute(cnn)
    cnn.Close()

    Irgendwie übergebe ich die Variable bei SETVAR nicht korrekt. Was mache ich falsch?

    Vielen Dank.
    Gruss
    Tobias

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Etwas grundsätzliches:
    Du kannst keine Kommandos aus der AS/400 aufrufen, du musst diese in QCMDEXC verpacken:

    call QSYS.QCMDEXC ('MyCmd', Länge als 10VK5NK formatiert)

    Man beachte, dass du das Kommando ja in Hochkomma setzen musst, also sind alle enthaltenen Hochkommas zu verdoppeln:

    MyCmd = replace(MyCmd, "'", "''")

    .execute "call qsys.qcmdexc ('" & mycmd & "', " & format(len(mycmd), "0000000000.00000" ) & ")"
    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

  3. #3
    Registriert seit
    Nov 2003
    Beiträge
    2.403
    Ist VAR1 eine numerische oder alphanumerische Variable? Probier mal den Inhalt von VAR1 nach alphanumerisch umzusetzen und diese alphanumerische Zeichenfolge dann zu übergeben.

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    @Pikachu
    Hier wird ein SQL-Aufruf fabriziert.

    Ansonsten frage ich mich, warum der im QMQRY enthaltene SQL nicht direkt ausgeführt wird ?
    So muss man bei Korrekturen immer 2 Seiten ändern, das QMQRY und das Programm.
    Zumal du anscheinend das Ausgabeergebnis dann wieder per Select ausliest.
    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

  5. #5
    Registriert seit
    Jan 2010
    Beiträge
    83
    VAR1 übergebe ich alphanumerisch.

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Schau dir bitte meine Hinweise an.
    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

  7. #7
    Registriert seit
    Jan 2010
    Beiträge
    83
    habe das jetzt so umgesetzt, klappt aber noch nicht:

    cnn = New ADODB.Connection
    con_str = "Driver={iSeries Access ODBC Driver};System=ICHAS;Uid=TRUMPFH;Pwd=tobias;"
    cnn.Open(con_str)
    'CallCmd = New ADODB.Command
    OnErrorResumeNext
    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") & ")")
    cnn.Close()

    Habe ich hier einen Denkfehler?

    Gruss
    Tobias

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Prinzipell nicht, aber die Fehlermeldung (Err-Objekt, Errors-Auflistung der Connection) wäre schon ganz hilfreich.
    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
    sehr gerne, ich hoffe, daß Dir der ODBC-Treiber-Fehler CPF0006 etwas sagt:


    Serverfehler in der Anwendung /IMHO.

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

    Beschreibung: Unbehandelte Ausnahme beim Ausführen der aktuellen Webanforderung. Überprüfen Sie die Stapelüberwachung, um weitere Informationen über diesen Fehler anzuzeigen und festzustellen, wo der Fehler im Code verursacht wurde.

    Ausnahmedetails: System.Runtime.InteropServices.COMException: [IBM][iSeries Access ODBC-Treiber][DB2 UDB]CPF0006 - Im Befehl ist ein Fehler aufgetreten.

    Quellfehler:

    Zeile 116: CallCmd = Replace(CallCmd, "'", "''")
    Zeile 117:
    Zeile 118: cnn.Execute("CALL QSYS.QCMDEXC('" & CallCmd & "', " & Format(Len(CallCmd), "0000000000.00000") & ")")
    Zeile 119: 'cnn.Execute(CallCmd)
    Zeile 120:

    Stapelüberwachung:

    [COMException (0x80004005): [IBM][iSeries Access ODBC-Treiber][DB2 UDB]CPF0006 - Im Befehl ist ein Fehler aufgetreten.] ADODB.ConnectionClass.Execute(String CommandText, Object& RecordsAffected, Int32 Options) +0 AÜA.btn_aüa_Click(Object sender, EventArgs e) in C:\Dokumente und Einstellungen\trumpfheller\Eigene Dateien\Visual Studio 2008\WebSites\IMHO\AÜA.aspx.vb:118 System.Web.UI.WebControls.Button.OnClick(EventArgs e) +111 System.Web.UI.WebControls.Button.RaisePostBackEven t(String eventArgument) +110 System.Web.UI.WebControls.Button.System.Web.UI.IPo stBackEventHandler.RaisePostBackEvent(String eventArgument) +10 System.Web.UI.Page.RaisePostBackEvent(IPostBackEve ntHandler sourceControl, String eventArgument) +13 System.Web.UI.Page.RaisePostBackEvent(NameValueCol lection postData) +36 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    CPF0006 ist ein Syntaxfehler im Kommando.

    Nimm also dein Kommando und kopiere es in eine Befehlszeile auf der AS400.

    Ist die Zeile zu klein, einfach CALL QCMD aufrufen und F11 drücken.
    Ggf. zu viele/zuwenige Hochkommas ?
    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

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. STRQMQRY in einem CL-Programm/ FEHLER QWM2701
    By polo in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 16-10-06, 12:31
  3. Fehler: SQL0302 Umsetzungsfehler / ado
    By Asti in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 29-08-06, 13:24
  4. STRQMQRY Prompt
    By Elei in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 20-06-06, 13:51
  5. Timestamp als Parameter in STRQMQRY
    By Jenne in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 23-03-05, 09:50

Berechtigungen

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