ODBC - Firebird SQL Errorhandling

  • Hi,

    Ich befasse mich im Moment ein wenig mit ODBC (da bin ich noch Neuling). Im Moment mache ich noch alles über FlameRobin wollte mir aber ein paar AutoIt Scripte schreiben :).

    Hier mein Script

    Spoiler anzeigen
    [autoit]

    Dim $cn, $rs, $i

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

    $cn = ObjCreate("ADODB.Connection")
    $cn.Open("Driver=Firebird/InterBase(r) driver;" & _
    "Uid=SYSDBA;" & _
    "Pwd=masterkey;" & _
    "DbName=localhost/3050:C:\Datenbanken\Test.FDB;" & _
    "Dialect=3;")
    $rs = $cn.Execute("SELECT RDB$GET_CONTEXT('SYSTEM', 'ENGINE_VERSION') AS Firebird_Version, RDB$GET_CONTEXT('SYSTEM', 'NETWORK_PROTOCOL') AS Netzwerkprotokoll, RDB$GET_CONTEXT('SYSTEM', 'CLIENT_ADDRESS') AS Adresse FROM RDB$DATABASE;")
    While Not $rs.EOF
    For $i = 0 To $rs.Fields.Count - 1
    ConsoleWrite($rs.Fields($i).Name & " " & $rs.Fields($i).Value & @CRLF)
    Next
    $rs.MoveNext
    WEnd
    $rs.Close
    $cn.Close

    [/autoit]

    Nun zu meiner Frage:
    Wie bekomme ich es hin, den Errorcode auszulesen wenn ich z.B. eine nicht existente Tabelle abrufe oder ein Indexeintrag bereits besteht (Duplicate Value) ?


    Beispiel FlameRobin:

    SQL
    Select * from tabellegibbetnicht;
    Spoiler anzeigen

    Danke schon einmal im Voraus :)

    21 is only half the truth.

    Einmal editiert, zuletzt von Mahagon (11. Juni 2011 um 12:31)

    • Offizieller Beitrag

    Verwende den Objekt-Errorhandler.
    Am Skriptanfang initialisieren:

    [autoit]

    Global $oMyError = ObjEvent("AutoIt.Error","MyErrFunc")

    [/autoit][autoit]

    Func MyErrFunc()
    Local $sERR = _
    "err.description is: " & @TAB & $oMyError.description & @CRLF & _
    "err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _
    "err.number is: " & @TAB & hex($oMyError.number,8) & @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
    Msgbox(0,"AutoItCOM Test","Ein COM-Fehler ist aufgetreten !" & @CRLF & @CRLF & $sERR)
    Local $err = $oMyError.number
    If $err = 0 Then $err = -1
    Local $g_eventerror = $err
    Endfunc

    [/autoit]