[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Feb 2010
    Beiträge
    5
    Ok,

    das mit dem Select-Function hab ich verstanden!

    1 Wert, mehr nicht... ist zumindest etwas

    dann würd es so aussehen??

    Code:
    Public Function fct_getDataRelist(strIPAS400 As String, strIPUSER As String, strIPPASS As String)
    Dim cnAS400 As ADODB.Connection, cmdAS400SQL As ADODB.Command, rsAS400 As ADODB.Recordset
        
        Set cnAS400 = CreateObject("ADODB.Connection")
        cnAS400.Provider = "IBMDA400"
        cnAS400.Properties("data source") = strIPAS400
        cnAS400.Properties(2) = strIPUSER
        cnAS400.Properties("Password") = strIPPASS
        cnAS400.Open
        
        Set cmdAS400SQL = CreateObject("ADODB.Command")
        Set rsAS400 = CreateObject("ADODB.recordset")
        rsAS400.CursorType = adOpenDynamic
        rsAS400.CursorLocation = adUseServer
        rsAS400.LockType = adLockReadOnly
        Set cmdAS400SQL.ActiveConnection = cnAS400
        
        cmdAS400SQL.CommandText = "select myFunc(...) as hugo from sysibm.sysdummy1"
        cmdAS400SQL.CommandType = adCmdText
        
        Set rsAS400 = cmdAS400SQL.Execute
            Do Until rsAS400.EOF = True
            
                    CurrentDb.Execute "INSERT INTO tbl_ACCESSTABELLE (ACCESTABELLEWERT) VALUES " _
                    & "('" & rsAS400("HUGO") & "')"
            
                rsAS400.MoveNext
            Loop
    
    End Function
    Richtig?

    Aber wie ich das andere genaue nutzen soll mit den mehreren Parametern, versteh ich nicht..., tut mir leid bin da noch nicht so fit :<.

    thomas.

  2. #2
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Code:
        cmdAS400SQL.CommandText = "{select myFunc(?, ?, ?) as hugo from sysibm.sysdummy1}"
        cmdAS400SQL.CommandType = adCmdText
        cmdAS400SQL.Parameters.Append = cmdAS400SQL.CreateParameter("@nPackStueckId", adInteger, adParamInput)
        cmdAS400SQL.Parameters.Append = cmdAS400SQL.CreateParameter("@nAbrufId", adInteger, adParamInputOutput)
        cmdAS400SQL.Parameters.Append = cmdAS400SQL.CreateParameter("@nError", adInteger, adParamOutput)
    eh so wie du es vorher schon gemacht hattest.

  3. #3
    Registriert seit
    Feb 2010
    Beiträge
    5
    Wo bekomme ich dann parameter zurück?

    bei Append sagt er mir das es nicht optional ist? muss ich das "=" rausnehmen?

  4. #4
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    mit
    Set rsAS400 = cmdAS400SQL.Execute
    bekommst du einen datensatz zurück.

    wie die syntax in vb aussehen muss, weis ich leider nicht. entweder mit F1 auf das objekt bzw. in der MSDN nachschauen gehen oder googlen.
    vlt. gibts aber noch jemandem der sich da genau auskennt.

  5. #5
    Registriert seit
    Feb 2010
    Beiträge
    5
    Ok,

    können wir das kurz nochmal aufschlüsseln?

    Aufruf der Funktion!, Die Fragezeichen in den Klammern bedeuten das hier Parameter eingefügt werden, oder?

    Code:
    cmdAS400SQL.CommandText = "{call ILS_ABRUF.ILS_ADD_Abrufpack (?, ?, ?)}"
    Insgesamt muss ich 3 Parameter übergeben?! Das mache ich mit:
    Die erste Stelle ist der Wert, die Zweite die Deklaration (integer), und das dritte sagt aus ich füge einen Parameter hinzu (adParamInput)? Richtig?

    Code:
    cmdAS400SQL.Parameters.Append = cmdAS400SQL.CreateParameter("@nPackStueckId", adInteger, adParamInput)
    2. Parameter?

    Code:
    cmdAS400SQL.Parameters.Append = cmdAS400SQL.CreateParameter("@nAbrufId", adInteger, adParamInputOutput)
    3. Parameter?
    Code:
    cmdAS400SQL.Parameters.Append = cmdAS400SQL.CreateParameter("@nError", adInteger, adParamOutput)

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.954
    Bei Funktionen (Aufruf Select) kannst du nur adParamInput verwenden, bei Prozeduren (Aufruf Call) gibts du alles an.

    Wenn du keine NULL-Werte verarbeiten willst, dann reicht (wie Dieter sagt), Parameterstyle generell und du kannst jedes Programm, dass keine Strukturen sondern nur einzelne Werte verwendet definieren und aufrufen.

    Führe einfach per cnnAs400.Execute folgenden Befehl aus:

    CREATE PROCEDURE MyLib/MyPgm
    (IN Parm1 Integer
    ,INOUT Parm2 Integer
    ,OUT Parm3 Integer
    )
    LANGUAGE RPG
    DETERMINISTIC
    EXTERNAL NAME 'MyLib/MyPgm'
    PARAMETER STYLE GENERELL

    Wichtig ist, dass die Parameter deines AS/400-Programmes zu den SQL-Typen auch passen.
    Integer ist in RPG "B 9 0", in ILERPG "10I 0".

    Ansonsten kannst du auch CHAR, VARCHAR usw. verwenden.

    Wenn der Execute auf Fehler läuft, gibts eigentlich nur 3 Gründe:
    1. Syntaxfehler
    2. Journalisierung inaktiv und Connection ist nicht mit CMT=0
    3. Prozedur schon vorhanden
    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 Access ODBC mit JOIN: SQL FEHLER666
    By olafu in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 05-10-06, 08:13
  2. Timestamp Feld von MS Access abfragen
    By andreas.lundschien in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 05-09-06, 14:55
  3. ODBC-Zugriff mit MS Access - SQL - Userabfrage
    By User in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 26-01-05, 20:52
  4. iSeries + MS Access
    By reraru in forum IBM i Hauptforum
    Antworten: 13
    Letzter Beitrag: 18-01-05, 13:06
  5. MS Access 97 - DB2 Problem
    By Salvi in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 21-05-04, 07:44

Berechtigungen

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