Scriptabbruch bei Scriptfehler verhindern

  • Ich schon wieder.

    Meine Scripte übermitteln per IE einige meldungen an eine mySQL DB. Das klappt in der Regel auch recht gut, nur manchmal (vermutlich wenn der empfangende Server gerade beschäftigt ist) führt die Aktion zu einem Scriptfehler (the requested action with the oject failed (oder so)). Das wäre nicht so schlimm (fehlt halt ne Statusmeldung), aber das Script beendet sich deswegen. Kann ich das irgendwie verhindern? Also erreichen, das das Script unter allen Umstaänden weiterläuft? Wie gesagt, in 95 von 100 Fällen funzt das senden, nur eben manchmal nicht)

    P.S. Das senden fünktioniert über eine IE-Adresse (http://server.de/status.php meldung = &meldeung...etc)

  • Du solltest nicht den Fehler akzeptieren sondern ihn beheben.

    Am besten das Script mal posten und evtl. ist das so ein kleiner Fehler, das Du danach drüber lachst, das er da war.

    Also hab mut !

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • ^^ Ja, leider ist es außerhalb meines Einflusses. Der Fehler kommt, weil ich mit

    Code
    $IEo=_iecreate("serveradresse/join.php?wert=irgendwas")

    werte an den Webserver sende, und der Apache in diesem Augenblick gerade nicht läuft, die hunderte km lange leitung gestört ist, oder sonstwas verhindert, das das senden funzt. Das kann ich nicht ändern. daher mein Wunsch, wenigstens den Scriptabbruch zu verhindern.

    sowas wie "on error do nothing" oder so

  • das werde ich versuchen. wie reagiert autoit, wenn es wegen der nicht erreichbaren adresse das objekt nicht erzeugen kann?

    • Offizieller Beitrag

    Success: Returns an object variable pointing to an InternetExplorer.Application object
    Failure: Returns 0 and sets @ERROR
    @Error: 0 ($_IEStatus_Success) = No Error
    1 ($_IEStatus_GeneralError) = General Error
    3 ($_IEStatus_InvalidDataType) = Invalid Data Type
    4 ($_IEStatus_InvalidObjectType) = Invalid Object Type
    6 ($_IEStatus_LoadWaitTimeout) = Load Wait Timeout
    8 ($_IEStatus_AccessIsDenied) = Access Is Denied
    9 ($_IEStatus_ClientDisconnected) = Client Disconnected
    @Extended: Set to true (1) or false (0) depending on the success of $f_tryAttach

  • und für den IE gibt es noch ...

    [autoit]

    _IEErrorHandlerRegister()

    [/autoit]
  • Ich muss die Frage noch mal ganz nach oben bringen. Wie kann ich einen Scriptabbruch verhindern (Error Line-1). Ich kenne die Ursache, kann aber nix dagehgen unternehmen. In meinem Fall: Ich sende MySQL-Querys (mit der MySQL.au3), und wenn der SQL-Server mal nicht da ist, kommt der genannte Error. Das will ich auf alle Fälle verhindern, das die SQL-Sache nur Logs auf einem Server sind, wenn die nicht geschrieben werden, ists egal, hauptsache das script bricht nicht ab. Habe ich mich einigermaßen verständlich ausdrücken können?

  • Mit QDBC. Dies ist die betreffende Funktion. Meine frage ist aber ehr allgemein gehalten. Wenn irgendeine Aktion der gescripteten Dinge fehlschlägt, warum auch immer, soll wenigstens der Rest erledigt werden.

    Spoiler anzeigen

    Func _MySQLConnect($sUsername, $sPassword, $sDatabase, $sServer, $sDriver = "{MySQL ODBC 3.51 Driver}", $iPort=3306)
    Local $v = StringMid($sDriver, 2, StringLen($sDriver) - 2)
    Local $key = "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers", $val = RegRead($key, $v)
    If @error or $val = "" Then
    SetError(2)
    Return 0
    EndIf
    $ObjConn = ObjCreate("ADODB.Connection")
    $Objconn.open ("DRIVER=" & $sDriver & ";SERVER=" & $sServer & ";DATABASE=" & $sDatabase & ";UID=" & $sUsername & ";PWD=" & $sPassword & ";PORT="&$iPort)
    If @error Then
    SetError(1)
    Return 0
    Else
    Return $ObjConn
    EndIf
    EndFunc

  • ODBC läuft über Objekte. Also sollte $oCOMError = ObjEvent("AutoIt.Error", "_MyErrFunc") weiterhelfen ;) Und eine globale Variable, die festlegt, ob geloggt werden soll und bei einem Fehler auf False gesetzt wird.

  • Das klingt, als ob ich es verstehen könnte. da werde ich mal rumprobieren. Danke erstmal. Wenn ich nicht weiterkomme, frag ich wieder. Hat sich bewährt hier im Forum. ;)

    • Offizieller Beitrag

    Du kannst auch warten bis der Server-Dienst antwortet.

    Spoiler anzeigen
    [autoit]

    $szIP = "127.0.0.1" ; IP-Adresse oder Name des MySQL-Servers
    $iPort = 3306 ; kann auch 3333 sein

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

    TCPStartUp()
    do
    $socket = TCPConnect(TCPNameToIP($szIP), $iPort)
    Sleep(100)
    Until $socket <> -1
    TCPShutdown()

    [/autoit]
  • warten ist keine Option. es soll einfach "senden und vergessen" sein.

    mit dem: $oCOMError = ObjEvent("AutoIt.Error", "_MyErrFunc") :

    ich habe diese Zeile eingefügt, eine Funktion (_MyErrFunc) geschrieben, doch das reultat ist das gleiche. diese Funktion muss ich doch in die MyAQL.au3 integrieren, diese verursacht ja den fehler, oder?

  • Das gilt für das ganze Skript und fängt Fehler ab, die etwa dadurch entstehen, dass ein Objekt nicht geladen wird. Wenn es aber ein Array-Fehler oder so ist, dann funktioniert das nicht.
    Poste mal den Fehler vom unkompilierten Skript (da sind ja auch die Zeilenangabe und weitere Infos mit drin)

  • @ Qbernd670 Deine Lösung hat gewonnen. Ich hab ne Nacht drüber geschlafen, und dann ist die simple Lösung: Wenn Server nicht da - exit aus der Funktion. einfach aber wirkungsvoll. Manchmal kommt man auf die einfachsten Dinge nicht.