[NEWSboard IBMi Forum]

Hybrid View

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

    Call-Befehl über VBA an AS400 funktioniert nicht

    Hallo,
    iServer V5R3 und VBA (dotnet)

    Ich habe hier im Forum recherchiert und möchte über VBA eine Query auf der AS400 starten und gebe über VBA noch einen Parameter mit. Unten genannter Code wird per VBA (dotnet) ohne Fehlermeldung ausgeführt (der hinterlegten Query auf der AS400 wird ein Parameter VAR1 übergeben), doch die PF-Datei(Tabelle) wird nicht mit dem übergebenen Parameter überschrieben. Der abgesetzte CallCmd-Befehl funktioniert einwandfrei, wenn man ihn in der Befehlszeile der AS400 absetzt. Über VBA will das aber nicht funktionieren und die PF-Datei hat seinen alten Stand. Warum wird der Call nicht ausgeführt?

    Vielen Dank für Eure Hilfe.

    Dim cnn As ADODB.Connection
    'Dim cmd As ADODB.Command
    cnn = New ADODB.Connection
    Dim CallCmd As String
    cnn.Open("Provider=IBMDA400;" & _
    "Data Source=AS400Server;" & _
    "User ID=USER;" & _
    "Password=PWD;")
    CallCmd = "STRQMQRY QMQRY(TRUMPFH/TTRAJJLIP9) ALWQRYDFN(*YES) SETVAR((VAR1 0519617))"
    cnn.Execute("CALL QSYS.QCMDEXC ('" & CallCmd & "', " & Format(Len(CallCmd), "0000000000.00000") & ")")
    cnn.Close()

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    STRQMQRY gibt die Daten am Bildschirm aus.
    Für eine Dateiausgabe ist OUTPUT(*OUTFILE) erforderlich.

    Allerdings frage ich mich, warum du den Select nicht direkt selber verwendest, das wäre erheblich schneller.
    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
    Jan 2010
    Beiträge
    83
    Hallo Herr Fuerchau,

    ... ist das so richtig:

    CallCmd = "STRQMQRY QMQRY(TRUMPFH/TTRAJJLIP9) OUTPUT(*OUTFILE) OUTFILE(TRUMPF/TTRAJJLIP9) ALWQRYDFN(*YES) SETVAR((VAR1 0519617))"

    Danke.

    Wie müsste ich denn, denn Select einbauen?

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Schau dir den Inhalt deines QMQRY einfach an. Wenn die Basis ein QRYDFN ist, kannst du per RTVQMQRY den Select in eine SRC-PF kopieren.

    Diesen Select gibst du halt per Execute an.
    Du kannst dann
    a) VAR1 direkt per Replace vorher ersetzen
    b) Statt VAR1 einen Parametermarker "?" setzen und per Command-Object den Select ausführen.
    Du erhältst dann ein Recordset.

    Schließlich holst du doch die Daten auch per Select ab, oder ?
    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
    ...verstehe ich das richtig, das heißt bspw.:

    die bestehende query (definiert als *QRYDFN -->
    TTRAJJLIP9 *QRYDFN QRY Verkaufte Tore (Nach Land)

    kann ich mit einem geändertem select-Befehl überschreiben?
    Können Sie mir bitte einen Tipp geben, wie der Befehl RTVQMQRY aussehen muss?
    Was müsste dann in der Klammer beim Befehl cnn.execute() übergeben werden?
    ...
    cmd = select idr, kdnr from tabelle1 where kdnr = ?
    cnn.execute(cmd)

    Hätten Sie evt einen kurzen Codeausschnitt an dem ich mich orientieren könnte?

    Tausend Dank für Ihre Hilfe.

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Deine Fragen verstehe ich jetzt überhaupt nicht mehr.
    Benötigst du eine Einweisung, wie man per ODBC Daten von der AS/400 per Select abruft ?

    Schau dir doch bitte einfach die ODBC-Beispiele in der MSDN oder der ADO-Dokumentation an.
    Diese findist du in deinem Windows-Verzeichnis in Help, ADO-Hilfe.
    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
    Oh nein, nein - Selects und ODBC sind nicht das Problem. Es geht mir um die Umsetzung des Befehls RTVQMQRY im Zusammenspiel mit VBA. Ich habe ja diese zwei funktionierende Befehlszeilen:

    CallCmd = "STRQMQRY QMQRY(TRUMPFH/TTRAJJLIP9) OUTPUT(*OUTFILE) OUTFILE(TRUMPFH/TTRAJJLIB9) ALWQRYDFN(*YES) SETVAR((VAR1 0519617))"
    cnn.Execute("CALL QSYS.QCMDEXC ('" & CallCmd & "', " & Format(Len(CallCmd), "0000000000.00000") & ")")

    Ich habe nicht ganz die Umsetzung mit RTVQMQRY verstanden. Wie kann das denn jetzt aussehen?

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Nicht in VBA lösen, sondern manuell den Select auf der AS/400 ansehen und in dein VBA für ein Command-Objekt kopieren.

    Hast du ein QRYDFN-Objekt kannst du per RTVQMQRY (Bedienung siehe F1-Hilfe) das QRYDFN in eine Quelle schreiben.
    Ansonsten kannst du per STRQM->1 dir den SQL ja ansehen und ins VBA kopieren.
    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
    ...ist das korrekt von der Syntax:

    CallCmd = STRQMQRY QMQRY(SELECT DISTINCT A.LINDLL A.LIKNR A.LIRAL A.LIMENG A.LIBREI
    A.LIHOCH A.LIHGRT FROM "TRUMPFH"/"TTRAJJLIP9" A WHERE (LIKNR = 0512079))

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

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Jetzt bin ich aber enttäuscht.
    Wie kodierst du denn sonst einen Select ?

    Ich mach das immer so:
    dim Cmd as new ADODB.Command
    dim Rcd as ADODB.Recordset
    Cmd.Commandtext = "Select ..."
    set xCmd.ActiveConnection = cnn
    set Rcd = Cmd.Execute
    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. Programm auf "ferner" AS400 ausführen.
    By Souljumper in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 13-05-09, 19:50
  2. FTP Befehl mit Wildcard von AS400
    By Souljumper in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 13-11-06, 12:34
  3. Tape von einer AS400 von anderer AS400 aus nutzen?
    By hs in forum IBM i Hauptforum
    Antworten: 15
    Letzter Beitrag: 07-11-06, 19:28
  4. Druckereinrichtung auf AS400?
    By stephanr1 in forum NEWSboard Drucker
    Antworten: 7
    Letzter Beitrag: 20-07-06, 14:00
  5. AS400 Operatorin sucht Stelle im Raum Frankfurt
    By NixWisserin in forum NEWSboard Server Job
    Antworten: 0
    Letzter Beitrag: 15-02-05, 17:51

Berechtigungen

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