[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Jun 2004
    Beiträge
    13

    IBMDA400 OLEDB

    Ich habe folgendes Problem.
    V4R4M0
    Wenn ich auf der AS400 einen Datensatz hinzufüge (Lib1/file1),
    per SQL oder STRQMQRY habe ich keine Probleme. Alle Libraries sind im Zugriff bzw.
    ich füge sie mit addlible zu. Das Problem file1 besitz 3 Trigger, wobei die Triggerprogamme
    (Insert-Trigger...) sich in verschiedenen Libraries befinden.
    Da ich aber Programme in VB6 einsetze und mitdem Provider IBMDA400 arbeite bekomme ich sofort einen Fehler wenn ich einen INSERT Befehl absetze.
    Die Triggerprogramme werden in den anderen Libraries nicht gefunden.!!!
    strSQL1 = _
    "INSERT INTO lib1.file1 (TSACHN) VALUES(" & Sachn & ")"
    With cmd400
    .Execute "{{ADDLIBLE LIB(lib2)}}"
    .Execute "{{ADDLIBLE LIB(lib3)}}"
    .Execute "{{ADDLIBLE LIB(lib4)}}"
    .Execute "{{ADDLIBLE LIB(lib5)}}"
    .CommandTimeout = 100
    .CommandText = strSQL1
    .CommandType = adCmdText
    .Parameters.Refresh
    .Execute
    End With
    Auch diese Programm Kombination bringt keinen Erfolg.

    Ich habe das Problem nicht vollstädig beschrieben:
    Der Insert Trigger findet natürlich das entsprechende Programm nur
    dieses ruft weitere Programme in anderen Libs auf (zB Prüfungen,Protkollsätze schreiben..) und hier liegt das Problem.

    Wer kann mir eine Tip geben .......
    Danke

  2. #2
    Registriert seit
    Jan 2001
    Beiträge
    837
    Hallo RST,

    ich glaube das der Fehler woanders zu suchen ist.
    Die Triggerprogramme die an der Datei hängen
    werden fest verdrahtet. Wenn Du ein DSPFD
    machst kannst Du sehen welches Triggerprogramm aus welcher
    Library gestartet wird. Ich meine das ist unabhängig davon
    ob die Library in der Bibliotheksliste des Jobs
    vorhanden ist.

    gruss Michael

  3. #3
    Registriert seit
    Jun 2004
    Beiträge
    13
    Ich habe die Problem Beschreibung erweitert.
    Mit dem Befehl PRTTRGPGM kann man eine Liste aller
    Trigger listen.

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.300
    Das Triggerprogramm selber kann einen ADDLIBLE per QCMDEXC ausführen (in der *INZSR). Dadurch dürfte das Problem behoben sein.

    Oder per SQL dann folgendes:
    With cmd400
    Str = "ADDLIBLE LIB(lib2)"
    .Execute "{{call qcmdexc ('" & Str & "', " & format$(len(Str), "0000000000.00000") & ")}}"
    end with

    Wobei es besser ist, wenn das Triggerprogramm es macht, da auch auf anderem Wege SQL (e.g. STRSQL) aufgerufen werden könnte.
    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
    Jun 2004
    Beiträge
    13
    Hallo Herr Furchau,
    Ich habe den Hinweis umgesetzt.
    nachfolgender Programm-Code bring den gleichen Fehler
    wie gehabt..

    strSQL1 = _
    "INSERT INTO lib1.file1 (TSACHN) VALUES(" & Sachn & ")"
    With cmd400
    strSQL2 = "ADDLIBLE LIB(lib2)"
    .Execute "{{CALL QSYS.QCMDEX('" & strSQL2 & "'," & Format$(Len(strSQL2), "0000000000.00000") & ")}}"
    strSQL2 = "ADDLIBLE LIB(lib3)"
    .Execute "{{CALL QSYS.QCMDEX('" & strSQL2 & "'," & Format$(Len(strSQL2), "0000000000.00000") & ")}}"
    .CommandText = strSQL1
    .CommandType = adCmdText
    .Execute
    End With

    ich habe den Programmcode geändert in dem ich ein SQL Statement
    mit STRQMQRY aufrufe. Nachfolgender Code

    With cmd400
    strSQL2 = "ADDLIBLE LIB(lib2)"
    .Execute "{{CALL QSYS.QCMDEX('" & strSQL2 & "'," & Format$(Len(strSQL2), "0000000000.00000") & ")}}"
    strSQL2 = "ADDLIBLE LIB(lib3)"
    .Execute "{{CALL QSYS.QCMDEX('" & strSQL2 & "'," & Format$(Len(strSQL2), "0000000000.00000") & ")}}"
    strSQL2 = "STRQMQRY QMQRY(lib1/file1) SETVAR((SACHN " & Sachn & "))"
    .Execute "{{CALL QSYS.QCMDEX('" & strSQL2 & "'," & Format$(Len(strSQL2), "0000000000.00000") & ")}}"
    End With

    Dieser VBA-Code wird ohne Fehler abgearbeitet aber Sachn ist in lib1/file1
    nicht vorhanden. Das Jobprotokoll zum Job QZDASOINIT sagt auch nichts aus.

    ????????

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.300
    Der Execute muss auf dem Connection-Object erfolgen, da er ja direkt ausgeführt wird.
    Als Command-Objekt gilt folgendes:

    with cmd400
    strSQL2 = "ADDLIBLE LIB(lib2)"
    .Commandtext = "{{CALL QSYS.QCMDEX('" & strSQL2 & "'," & Format$(Len(strSQL2), "0000000000.00000") & ")}}"
    .execute
    end with

    Der Execute eines Command führt Commandtext aus !
    Der Execute eines Connection führt den Argument-Text direkt aus !

    Überprüfe doch im Job, ob die Lib hinzugefügt wurde.
    Gibt es einen Fehler ?

    Warum kann das Triggerprogramm das nicht selber machen ?
    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
    Jun 2004
    Beiträge
    13
    Hallo Herr Fuerchau,

    Ich habe beides ausprobiert..

    mittels Connection Object:

    With cnn400
    strSQL2 = "ADDLIBLE LIB(Lib1)"
    strsql1 = "{{CALL QSYS.QCMDEX('" & strSQL2 & "'," & "0000000023.00000)}}"
    .Execute strsql1
    End With

    mittels Command Objekt:

    Set cmd400 = New ADODB.Command
    Set cmd400.ActiveConnection = cnn400
    With cmd400
    strSQL2 = "ADDLIBLE LIB(Lib1)"
    strsql1 = "{{CALL QSYS.QCMDEX('" & strSQL2 & "'," & "0000000023.00000)}}"
    MsgBox strsql1
    .CommandText = "{{CALL QSYS.QCMDEX('" & strSQL2 & "'," & "0000000023.00000)}}"
    .CommandType = adCmdText
    .Execute
    End With

    VB6 bringt mir einen Laufzeitfehler
    CPF0006 - Im Befehl ist ein Fehler.

    Ich hoffe Sie haben noch einen Tipp.

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.300
    Zumindest bist du da einen Schritt weiter !
    QCMDEXC wird mit 2 Parametern aufgerufen, 1. Zeichen, 2. gepackt 15.5.
    Daher die vielen Nullen, da der DB-Server Zahlen "as is" in gepackt formatiert (hier also 10 VK + 5 NK = 15.5).
    Der 2. Parameter muss GENAU die Länge des Kommandos enthalten !!!
    Ich komme nur auf 18 Stellen und nicht auf 23, daher hatte ich auch die FORMAT$-Anweisung vorgeschlagen, die ich dir auch empfehlen würde.
    Damit könntest du dir dann eine variable Funktion stricken:

    public sub ExecCmd(MyCmd as string, myCnn as ADODB.Connection)
    dim mySql as string
    mySql = "{{CALL QSYS.QCMDEX('" & myCmd & "'," & format$(len(MyCmd), "0000000000.00000") & ")}}"
    myCnn.Execute mySql,,adExecuteNoRecords
    end sub

    Ein Fehlerbehandlung ist nicht nötig, da der Aufrufer dies übernehmen sollte.
    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
    Jun 2004
    Beiträge
    13
    Hallo Herr Fuerchau
    mein Original String ist natürlich 23 stellig.
    Ich habe die Länge fix angegeben, da Format$
    0000000023,00000 zurückgibt also stadt einen Punkt ein
    Komma. Aber egal ob ich eine 23, 10, 18 , Komma oder Punkt
    einsetze bzw. mit ihrer Procedure arbeite und den zusätzlichen
    Parameter im Execute, es kommt immer der gleiche Fehler.
    CPF0006 - Im Befehl ist ein Fehler.
    Also im VB6 Code.
    Der Job Qzdasoinit auf der As400 ist noch nicht vorhanden.

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.300
    Kleiner Tippfehler ?
    Das Programm heißt natürlich QCMDEXC !

    Die FORMAT$ ist natürlich korrekt, da auch Dezimalwerte mit Dezimal-Komma angegeben werden. Dies ist allerdings von der IBMDA400-Einstellung abhängig, ob mit Dezimalpunkt oder -komma gearbeitet wird.

    Der Job auf der AS/400 muss natürlich da sein, sonst käme die CPF0006 nicht !
    Nachzuprüfen per "WRKOBJLCK MYUSER *USRPRF", dort im Joblog nachsehen.

    Wenn das alles nichts hilft, habe ich auch noch Beispiele per "CREATE PROCEDURE" hier im Forum (was das Dezimalkomma-Problem löst).
    Siehe hierzu: http://www.rlpforen.de/showthread.ph...hlight=qcmdexc
    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
    Jun 2004
    Beiträge
    13
    Ich selber habe das Programm in der qsys überprüft und dann
    prompt aus Ihren Vorschlag die falsche schreibweise übernommen.

    Um das Ganze zu Testen habe ich es jetzt auf der AS400 probiert!!

    folgender Befehl:

    CALL QSYS/QCMDEXC('ADDLIBLE LIB(LIB1)',0000000018.00000)

    Fehlernachricht:

    Nachricht . . . : Zeichen im Qualifikationsmerkmalsanfang 'QCMDEXC('A'
    ungültig.
    Ursache . . . . . : Das Qualifikationsmerkmal muß aus einer gültigen
    Zeichenfolge, einem numerischen oder vordefinierten Wert bestehen.

    aus dem Jobprotokoll:
    Bibliothek QSYS2929 nicht gefunden.
    Client-Anforderung - Ausführen des Befehls 'CALL
    '.
    Zeichen im Qualifikationsmerkmalsanfang 'QCMDEXC('A' ungültig.
    Fehler in Befehl *N gefunden.
    Im Befehl ist ein Fehler aufgetreten.

  12. #12
    Registriert seit
    Jan 2001
    Beiträge
    837
    Hallo ,

    mit dem VB kenne ich mich nicht aus
    aber hier die Syntax des qcmdexc von einer Befehlszeile
    CALL QSYS/QCMDEXC PARM('ADDLIBLE LIB(MK)' 0000000018,00000)

    Wichtig ist eigentlich das Schlüsselwort Parm

    und einen Leerstelle zwischen dem ersten und zweiten Parameter.

    gruss Michael

Similar Threads

  1. Zugriff mit MSAccess auf AS400 via OLE-DB
    By matjesfilet in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 03-11-05, 16:02
  2. SQL-Befehl "DELETE" macht Probleme
    By Neptun in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 28-07-05, 12:54
  3. Bibliotheks-Angabe bei OLE DB Verbindung mit IBMDA400
    By Neptun in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 21-07-05, 11:39
  4. Hartcodierter OLE DB Zugriff auf AS/400-Datenbank
    By tschroeder in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 04-05-05, 09:21
  5. EASYCOM OLEDB
    By Suomi in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 02-03-05, 09:34

Berechtigungen

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