$oRecordSet.Close() Fehlermeldung

  • Hallo Gemeinde,

    Ich setze einen Insert Into-Befehl an eine MS-Access-Db ab. Dieser Funktioniert auch und macht die Eintragung.
    Hat jemand eine Idee warum die Befehle

    Code
    $oRecordSet.Close()
    $oConnection.Close()

    den im Anhang dargestellten Fehler auswerfen?

    Spoiler anzeigen

    #include <Array.au3>

    #include <ADO.au3>

    #include <Access.au3>


    Global $sTableName = "Empfänger"

    Global $sDatabaseName = @ScriptDir & "\TestHW.accdb"

    Global $sVorname = "Idiot"

    Global $sNachname = "Voll"

    If Not FileExists($sDatabaseName) Then

    MsgBox(0, "Alert Missing Db", '! Error : DatabaseName = ' & $sDatabaseName & ' nicht gefunden' & @CRLF)

    Exit

    EndIf

    Global $oConnection = ObjCreate("ADODB.Connection")

    $oConnection.Open("Driver=Microsoft Access Driver (*.mdb, *.accdb); DBQ=" & $sDatabaseName)

    Global $oRecordSet = ObjCreate("ADODB.RecordSet")

    ;Global $sQuery = "Select Seriennummer, Standort, Leihgerät From " & $sTableName & " WHERE Seriennummer = " & "'" & $sVar & "'"

    ;Global $sQuery = "Update " & $sTableName & " SET Leihgerät = True, Ausleihdatum = '" & _Now() & "', [Kunden-Nr] = '" & $sEmployee & "', Standort = '" & $sPlatz & "' " & "WHERE Seriennummer = " & "'" & $sVar & "'"


    Global $sQuery = "INSERT INTO " & $sTableName & " (`Nachname`,`Vorname`) " & "VALUES ('" & $sNachname & "'," & "'" & $sVorname & "')"

    $oConnection.Execute($sQuery)

    $oRecordSet.Close()

    $oConnection.Close()

  • Füge einen COM Error Handler in Dein Skript ein. So erhältst Du detaillierte Informationen zum Fehler. Ein Beispiel dazu findest Du in der Hilfe bei ObjEvent.

  • guten Morgen Water,

    zunächst danke für deine Idee.

    Ich habe mir die Hilfe angesehen und den Errorhandler wie im Spoiler eingesetzt.

    Spoiler anzeigen

    #include <Array.au3>

    #include <ADO.au3>

    #include <Access.au3>

    #include <MsgBoxConstants.au3>

    Global $sTableName = "Empfänger"

    Global $sDatabaseName = @ScriptDir & "\TestHW.accdb"

    Global $sVar = "SPF2Q31YZ"

    Global $sEmployee = 559

    Global $sPlatz = "Platz, Depp"

    Global $sVorname = "Idiot"

    Global $sNachname = "Voll"

    Global $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc")

    If Not FileExists($sDatabaseName) Then

    MsgBox(0, "Alert Missing Db", '! Error : DatabaseName = ' & $sDatabaseName & ' nicht gefunden' & @CRLF)

    Exit

    EndIf

    Global $oConnection = ObjCreate("ADODB.Connection")

    $oConnection.Open("Driver=Microsoft Access Driver (*.mdb, *.accdb); DBQ=" & $sDatabaseName)

    Global $oRecordSet = ObjCreate("ADODB.RecordSet")

    ;Global $sQuery = "Select Seriennummer, Standort, Leihgerät From " & $sTableName & " WHERE Seriennummer = " & "'" & $sVar & "'"

    ;Global $sQuery = "Update " & $sTableName & " SET Leihgerät = True, Ausleihdatum = '" & _Now() & "', [Kunden-Nr] = '" & $sEmployee & "', Standort = '" & $sPlatz & "' " & "WHERE Seriennummer = " & "'" & $sVar & "'"


    Global $sQuery = "INSERT INTO " & $sTableName & " (`Nachname`,`Vorname`) " & "VALUES ('" & $sNachname & "'," & "'" & $sVorname & "')"

    $oConnection.Execute($sQuery)

    Sleep(10000)

    $oRecordSet.Close()

    $oConnection.Close()


    Func _ErrFunc($oError)

    ; Macht irgendwas hier.

    ConsoleWrite(@ScriptName & " (" & $oError.scriptline & ") : ==> COM Error intercepted !" & @CRLF & _

    @TAB & "err.number is: " & @TAB & @TAB & "0x" & Hex($oError.number) & @CRLF & _

    @TAB & "err.windescription:" & @TAB & $oError.windescription & @CRLF & _

    @TAB & "err.description is: " & @TAB & $oError.description & @CRLF & _

    @TAB & "err.source is: " & @TAB & @TAB & $oError.source & @CRLF & _

    @TAB & "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _

    @TAB & "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _

    @TAB & "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _

    @TAB & "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _

    @TAB & "err.retcode is: " & @TAB & "0x" & Hex($oError.retcode) & @CRLF & @CRLF)

    EndFunc ;==>_ErrFunc



    Aber anstatt mir den o. g. Fehler zu interpretieren, kommt ein Parsing-Fehler die Error-Func betreffend... ;(

    Ich bin mir sicher das ich da was falsch gemacht habe, nur was?

    mir ist auch nicht klar wieso die Anweisung $oConnection.Open funktioniert nur die .Close nicht...

  • Kannst Du bitte die ganze Fehlermeldung (Ausgabe in SciTE) posten?

  • In SciTE kann ich das Script nicht aufrufen, da die DB-Treiber nur als 32bit Version vorliegen.

    Jetzt habe ich das Script nochmal geöffnet und was soll ich sagen: Die Fehler kommen nicht mehr. Weiss der Geier was da los war... :?::?::?:

  • Wenn Du das Script nur kompiliert ausführen kannst, dann musst du entweder ConsoleWrite durch msgBox ersetzen oder die Exe als Konsolenanwendung ausführen.
    MsgBox scheint mir einfacher zu sein:

  • Hallo Water,

    mittlerweile habe ich das Proggi soweit, das der Errorrhandler funzt. der Fehler allerdings kommt nicht mehr. :party:

    Ich vermute ich hatte zuviel der Close-Sequenzen drin...