DB2 connect via Autoit

    • Offizieller Beitrag

    Hallo,

    hast Du einen ODBC-Treiber für DB2? Dann sollte es über ADODB kein Problem sein!

    • Offizieller Beitrag

    Hi bernd,

    vielen Dank für die Antwort. Habe es lokal auch mittlerweile hinbekommen. Als nächstes suche ich ein paar Möglichkeiten um UDFs zu schrieben um SQL absetzen zu können und den Inhalt der Tabellen anzeigen zu lassen.
    Anschließend werde ich mal einen Connect gegen AIX und zOS versuchen.

    Spoiler anzeigen
    [autoit]

    ; Initialize COM error handler
    Global $oMyError = ObjEvent('AutoIt.Error', 'MyErrFunc')

    [/autoit] [autoit][/autoit] [autoit]

    Global $provider = 'IBMDADB2'
    Global $IP = @ComputerName
    Global $port = 50000
    Global $DSN = 'MEGA'
    Global $userID = 'db2admin'
    Global $password = 'db2admin'

    [/autoit] [autoit][/autoit] [autoit]

    Global $Obj = _connectDB2($provider, $IP, $port, $DSN, $userID, $password)
    _printDB2Recordset($Obj, 'SELECT * FROM customer')

    [/autoit] [autoit][/autoit] [autoit]

    Func _connectDB2($provider, $IP, $port, $DSN, $userID, $password)
    Local $sqlCon = ObjCreate('ADODB.Connection')
    $sqlCon.Mode = 16 ; Erlaubt im MultiUser-Bereich das öffnen anderer Verbindungen ohne Beschränkungen [Lesen/Schreiben/Beides]
    $sqlCon.CursorLocation = 3 ; client side cursor Schreiben beim Clienten

    [/autoit] [autoit][/autoit] [autoit]

    $sqlCon.Open('Provider=' & $provider & ';IP=' & $IP & ';Port=' & $port & ';DSN=' & $DSN & ';User ID=' & $userID & ';Password=' & $password)
    If @error Then Return -1
    Return $sqlCon
    EndFunc ;==>_connectDB2

    [/autoit] [autoit][/autoit] [autoit]

    Func _printDB2Recordset($sqlCon, $SQL)
    Local $sqlRs = ObjCreate('ADODB.Recordset')
    If Not @error Then
    $sqlRs.open($SQL, $sqlCon)
    If Not @error Then
    ;Loop until the end of file
    While Not $sqlRs.EOF
    ;Retrieve data from the following fields
    ConsoleWrite($sqlRs.Fields('FIRST_NAME' ).Value & @CRLF)
    ConsoleWrite($sqlRs.Fields('COUNTRY' ).Value & @CRLF)
    $sqlRs.MoveNext
    WEnd
    $sqlRs.close
    EndIf
    EndIf
    EndFunc ;==>_printDB2Recordset

    [/autoit] [autoit][/autoit] [autoit]

    Func MyErrFunc()
    $HexNumber = Hex($oMyError.number, 8)
    MsgBox(0, 'COM Test', 'We intercepted a COM Error !' & @CRLF & @CRLF & _
    'err.description is: ' & @TAB & $oMyError.description & @CRLF & _
    'err.windescription:' & @TAB & $oMyError.windescription & @CRLF & _
    'err.number is: ' & @TAB & $HexNumber & @CRLF & _
    'err.lastdllerror is: ' & @TAB & $oMyError.lastdllerror & @CRLF & _
    'err.scriptline is: ' & @TAB & $oMyError.scriptline & @CRLF & _
    'err.source is: ' & @TAB & $oMyError.source & @CRLF & _
    'err.helpfile is: ' & @TAB & $oMyError.helpfile & @CRLF & _
    'err.helpcontext is: ' & @TAB & $oMyError.helpcontext _
    )
    SetError(1) ; to check for after this function returns
    EndFunc ;==>MyErrFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;~ _executeSQLonDB2Recordset($Obj, "insert into " & "Autoit" & "values('Xenobiologist', 'User')")

    [/autoit] [autoit][/autoit] [autoit]

    Func _executeSQLonDB2Recordset($sqlCon, $SQL)
    Local $sqlRs = ObjCreate('ADODB.Recordset')
    $sqlRs.open('SELECT * FROM Autoit', $sqlCon)
    If Not @error Then
    $sqlRs.Source = "Select * From Autoit" ; ganze Tabelle
    $sqlRs.AddNew ;'Neuen Datensatz erzeugen
    ;~ 'Beispiele für Zuweisung von Werten an Tabellenfelder
    $sqlRs.Fields("Name") = "MEGA"
    $sqlRs.Fields("Job") = "MEGAMAN"
    $sqlRs.Update
    $sqlRs.close
    EndIf
    EndFunc ;==>_executeSQLonDB2Recordset

    [/autoit]

    Mega

  • Hi Xenobiologist,
    mal ne Frage die net genau mit dem Thema SQL-Anbindung zu tun hat.

    Woher bekommst du die Objektnamen der Funktionen
    z.B.

    Spoiler anzeigen
    [autoit]


    $HexNumber = Hex($oMyError.number, 8)
    MsgBox(0, 'COM Test', 'We intercepted a COM Error !' & @CRLF & @CRLF & _
    'err.description is: ' & @TAB & $oMyError.description & @CRLF & _
    'err.windescription:' & @TAB & $oMyError.windescription & @CRLF & _
    'err.number is: ' & @TAB & $HexNumber & @CRLF & _
    'err.lastdllerror is: ' & @TAB & $oMyError.lastdllerror & @CRLF & _
    'err.scriptline is: ' & @TAB & $oMyError.scriptline & @CRLF & _
    'err.source is: ' & @TAB & $oMyError.source & @CRLF & _
    'err.helpfile is: ' & @TAB & $oMyError.helpfile & @CRLF & _
    'err.helpcontext is: ' & @TAB & $oMyError.helpcontext _

    [/autoit]

    Alles das was z.B. hinter "$oMyError." steht. Woher weist du die (ich nene es mal) Objektnamen?

    MfG
    Der_Doc

  • $oMyError steht im Helpfile :)
    Von anderen Objekten in der Doku oder mit oleview.exe und iviewers.dll

  • Hi,
    danke für die Antwort.
    Ich habe die beiden Tools gedownloadet und installiet. Aber ich kann doch nicht einfach in dll Diles oder EXE Files reinschauen.
    Gibt es dafür ne Anleitung oder besser noch kennst du dich damit aus?

    Wenn ja dann würde ich sagen wir machen ein neues Thema auf um Xenobiologist nicht von seinem Prob abzubringen.

    MfG
    Der_Doc