Page 1 of 2 1 2 LastLast
Showing results 1 to 10 of 19

Thread: Seltsame Unhandled Exceptions

  1. #1

    Default Seltsame Unhandled Exceptions

    Hallo,
    ich hab ein Problem mit VBA in der Runtime 6.22 SP1.
    Und zwar bekomme ich in unregelmäßigen, nicht reproduzierbaren Abständen Runtime error. Auch die Aktionen, die diesen Verursachen sind vollkommen unterschiedlich, wie gesagt, bis jetzt noch nicht reproduzierbar
    Das zugehörige Logfile (zenrt32.txt) meint folgendes
    Code:
    //=====================================================
    3/19/2009, 12:51:26 PM
    zenOn Version: 6.22 SP1 Build0
    MS Windows NT Ver. 5.1.Service Pack 2
    Processor: x86
    //-----------------------------------------------------
    Exception code: C0150010 The activation context being deactivated is not active for the current thread of execution.
    
    Fault address:  7C943345 01:00042345 C:\WINDOWS\system32\ntdll.dll
    
    Registers:
    EAX:0012E928
    EBX:00000002
    ECX:7C91EB05
    EDX:7C90EB94
    ESI:0012FDD4
    EDI:00000000
    CS:EIP:001B:7C943345
    SS:ESP:0023:0012E91C  EBP:0012E97C
    DS:0023  ES:0023  FS:003B  GS:0000
    Flags:00000246
    
    Call stack:
    Address   Frame     Logical addr  Module
    7C943345  0012E97C  0001:00042345 C:\WINDOWS\system32\ntdll.dll
    7E41885A  0012FE0C  0001:0000785A C:\WINDOWS\system32\USER32.dll
    7E4189CD  0012FE6C  0001:000079CD C:\WINDOWS\system32\USER32.dll
    7E418A10  0012FE7C  0001:00007A10 C:\WINDOWS\system32\USER32.dll
    00705D80  0012FEB0  0001:00264D80 C:\Program Files\COPA-DATA\zenon 6.22 SP1\ZENON32.dll
    00705E36  0012FEC4  0001:00264E36 C:\Program Files\COPA-DATA\zenon 6.22 SP1\ZENON32.dll
    00705DDE  0012FED8  0001:00264DDE C:\Program Files\COPA-DATA\zenon 6.22 SP1\ZENON32.dll
    0071E251  0012FEE4  0001:0027D251 C:\Program Files\COPA-DATA\zenon 6.22 SP1\ZENON32.dll
    00412866  0012FF1C  0001:00011866 C:\Program Files\COPA-DATA\zenon 6.22 SP1\Zenrt32.exe
    7831D33B  0012FFC0  0001:0003C33B C:\WINDOWS\WinSxS\x86_Microsoft.VC80.MFC_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_3bf8fa05\MFC80U.DLL
    7C816FD7  0012FFF0  0001:00015FD7 C:\WINDOWS\system32\kernel32.dll
    
    //=====================================================
    3/19/2009, 12:51:48 PM
    zenOn Version: 6.22 SP1 Build0
    MS Windows NT Ver. 5.1.Service Pack 2
    Processor: x86
    //-----------------------------------------------------
    Exception code: C0000005 ACCESS_VIOLATION
    Fault address:  008B9266 01:00418266 C:\Program Files\COPA-DATA\zenon 6.22 SP1\ZENON32.dll
    Kann mir da irgendjemand vielleicht weiterhelfen? VBA code sind ein schon einige Zeilen, drum wollte ich ihn hier jetzt nicht posten.
    Mfg
    Matthias

  2. #2

    Default AW: Seltsame Unhandled Exceptions

    Ok, inzwischen hab ich zumindest das Problem gefunden, ein Task und eine ausführbare VBA Funktion versuchen, wenn es zeitlich blöd läuft, auf die selbe ini Datei zuzugreifen, darum auch die Access Fehlermeldung. Kennt jemand eine einfache Möglichkeit um dies zu Verhindern? Z.b. Prüfen ob eine Datei vom Betriebssystem schon geöffnet ist?
    Mfg
    Matthias

  3. #3
    Join Date
    30.05.2007
    Location
    Salzburg
    Posts
    879

    Default Re: Seltsame Unhandled Exceptions

    Spätestens beim Auftreten von "Unhandled Exceptions" sollte überlegt werden, ob eine Fehlerbehandlung (aka Errorhandler) vielleicht doch sinnvoll wäre!

    also 2. Tips bezüglich dem Problem:

    1. Errorhandler implementieren
    -> somit treten auch seitens der zenOn Runtime keine "Unhandled Expeptions" mehr auf (also Ursache vom VBA Codes)
    -> tritt ein Fehler beim Ausführen des VBA Codes auf, kann dieser mit Verwendung eines Errorhandlers schnell lokalisiert werden

    2. Filehandling
    wie wird das .ini File ausgelesen?
    durch die Verwendung von WinAPI Funktionen sollte das Problem eigentlich nicht auftreten (GetPrivateProfileString... )

    Gruß,
    Herbert

  4. #4

    Default AW: Seltsame Unhandled Exceptions

    Danke erst mal für die Infos/ Tipps.
    Das Interessante ist, dass beide Sachen eigentlich eingebaut sind, also das ini file wird mit "GetPrivateProfileString32" gelesen und der Errorhandler wird mit "On Error GoTo ERROR_HANDLING" eingebunden. Seltsamer weise hat es den Anschein, dass diese Fehler erst seit dem Runtime Update auf SP1 auftreten. Zum Testen hatte ich die Zyklischen Tasks deaktiviert und bis jetzt hatte ich keine weiteren Fehlermeldungen...
    Mfg
    Matthias

  5. #5

    Default AW: Seltsame Unhandled Exceptions

    Da ich das Problem immer noch habe, poste ich mal den Code, vielleicht ist mein Vorgehen ja grundsätzlich falsch. Es scheint nur von den Tasks abhängig zu sein, ich befürchte es hat damit zu tun, dass ich in meinem Task eine VBA funktion aufrufe, ist dies überhaupt möglich? der Code des Tasks:
    Code:
    'Initfunction
    Sub Task_Init()
    thisProject.sql_verbindungstest
    End Sub
    
    'The Mainfunction is a cyclic function
    Sub Task_Main()
    thisProject.sql_verbindungstest
    End Sub
    
    'Exitfunction
    Sub Task_Exit()
    End Sub
    
    'Timerfunction
    Sub Task_Timer(lTimerId)
    End Sub
    und die passende funktion aus der thisproject
    Code:
    Public Sub sql_verbindungstest()
        On Error GoTo ERROR_HANDLING
        Dim pw As String
        Dim src As String
        Dim usr As String
        pw = GetINIString("C:\sql.ini", "verbindung", "pw")
        usr = GetINIString("C:\sql.ini", "verbindung", "usr")
        src = GetINIString("C:\sql.ini", "verbindung", "src")
        If thisproject.Variables.Item("sql_source").Value <> src Then
        thisproject.Variables.Item("sql_source").Value = src
        End If
        If thisproject.Variables.Item("sql_user").Value <> usr Then
        thisproject.Variables.Item("sql_user").Value = usr
        End If
        If thisproject.Variables.Item("sql_password").Value <> pw Then
        thisproject.Variables.Item("sql_password").Value = pw
        End If
        Dim objConn As New ADODB.Connection
        Dim ConnectionString As String
        ConnectionString = "Password=" & pw & _
                           ";User ID=" & usr & _
                           ";Provider=" & "SQLOLEDB" & _
                           ";Data Source=" & src & _
                           ";Initial Catalog=" & "XXX;"
                           
                           
        objConn.Open ConnectionString
        'objConn.Execute ("Select verbindung from verbindung")
        objConn.Close
        Set objConn = Nothing
        If thisproject.Variables.Item("verbindung_sql").Value <> 0 Then
        thisproject.Variables.Item("verbindung_sql").Value = 0
        End If
    Exit Sub
    ERROR_HANDLING:
    If Err.Number = -2147467259 Then 'kein server
        If thisproject.Variables.Item("verbindung_sql").Value <> 1 Then
        thisproject.Variables.Item("verbindung_sql").Value = 1
        End If
    ElseIf Err.Number = -2147217843 Then 'falscher user
        If thisproject.Variables.Item("verbindung_sql").Value <> 2 Then
        thisproject.Variables.Item("verbindung_sql").Value = 2
        End If
    ElseIf (Err.Number <> -2147217843 And Err.Number <> -2147467259) Then
        MsgBox Err.Description + vbNewLine + vbNewLine + _
        Str$(Err.Number)
        thisproject.Variables.Item("verbindung_sql").Value = 1
        End If
        Exit Sub
    End Sub
    Funktioniert so weit auch alles, was mich etwas verwirrt. Aber sobald ich in der Runtime ein anderes VBA makro ausführen will, bekomm ich die unhandled exception:
    Code:
    //=====================================================
    3/26/2009, 3:42:46 PM
    zenOn Version: 6.22 SP1 Build0
    MS Windows NT Ver. 5.1.Service Pack 2
    Processor: x86
    //-----------------------------------------------------
    Exception code: C0000005 ACCESS_VIOLATION
    Fault address:  008B9266 01:00418266 C:\Program Files\COPA-DATA\zenon 6.22 SP1\ZENON32.dll
    
    Registers:
    EAX:00000000
    EBX:0012EE40
    ECX:0042EED0
    EDX:0042EED0
    ESI:0000006E
    EDI:00000428
    CS:EIP:001B:008B9266
    SS:ESP:0023:05DEFE24  EBP:05DEFE2C
    DS:0023  ES:0023  FS:003B  GS:0000
    Flags:00010206
    
    Call stack:
    Address   Frame     Logical addr  Module
    008B9266  05DEFE2C  0001:00418266 C:\Program Files\COPA-DATA\zenon 6.22 SP1\ZENON32.dll
    004D0A6F  05DEFE38  0001:0002FA6F C:\Program Files\COPA-DATA\zenon 6.22 SP1\ZENON32.dll
    008E6B7F  05DEFE60  0001:00445B7F C:\Program Files\COPA-DATA\zenon 6.22 SP1\ZENON32.dll
    008E37FC  05DEFE84  0001:004427FC C:\Program Files\COPA-DATA\zenon 6.22 SP1\ZENON32.dll
    00A6938E  05DEFEEC  0001:005C838E C:\Program Files\COPA-DATA\zenon 6.22 SP1\ZENON32.dll
    78348236  05DEFF74  0001:00067236 C:\WINDOWS\WinSxS\x86_Microsoft.VC80.MFC_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_3bf8fa05\MFC80U.DLL
    781329BB  05DEFFAC  0001:000019BB C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700\MSVCR80.dll
    78132A47  05DEFFEC  0001:00001A47 C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700\MSVCR80.dll
    Sollte es nicht möglich sein via vb vba funktionen aufzurufen, wieso geht es dann teilweise und ist es dann möglich in VB die ADODB-Recordsets einzubinden?

    Gruß
    Matthias

  6. #6
    Join Date
    30.05.2007
    Location
    Salzburg
    Posts
    879

    Default Re: Seltsame Unhandled Exceptions

    Hallo,

    Folgendes:
    • VBA läuft im gleichen Thread wie die Applikation (hier zenOn) und ist single-threaded
      -> somit wird ein VBA Code zeilenweise abgearbeitet
    • PCE läuft in einem eigenem Thread (grob gesagt "ausserhalb" von zenOn)


    Durch das zyklische Aufrufen des VBA Codes (thisProject.sql_verbindungstest) von ausserhalb (PCE) kommt es dann zu einem Problem, wenn genau zu diesem Zeitpunkt, wo eigentlich VBA "belegt" ist, von der zenOn Runtime ein weiteres Mal ein VBA Code aufgerufen wird. Das verursacht dann einen Absturz der Runtime, welcher applikationsseitig (sprich zenOn) nicht abgefangen werden kann.

    Was genau soll durch das zyklische Abfrage einer SQL-Verbindung bewirkt werden?

    Eine Art "Timer" könnte durch die Zeitsteuerung durchgeführt werden (zyklisch eine Funktion ausführen). Jedoch ist zu bemerken, dass wenn seitens zenOn ein VBA-Code aufgerufen wird (z.B. eben eine Verbindung zu einer SQL-Datenbank) und dieser Code Probleme macht (z.B. bleibt der Verbindungsaufbau hängen), dann steht auch die zenOn Runtime (weil eben im gleichen Thread).

    Gruß,
    Herbert

    Rein aus Interesse noch: welche Zykluszeit in PCE wurde für die Ausführung des Tasks konfiguriert bzw. welche Priorität?

  7. #7

    Default AW: Seltsame Unhandled Exceptions

    Der zyklische Aufruf der SQL-Verbindung ist eine Verbindungsstörungsanzeige zu dem SQL- Server. Sollte ein Fehler auftreten wird anhand einer RM die Ursache ermittelt und als Alarm ausgegeben. Die Zykluszeit wäre auf 60 sekunden festgelegt, also 60000.
    Es würde aber auch noch ein weiterer Task exisiterien, der alle 5minuten ein paar werte in eine SQL tabelle schreiben soll. mit diesem Task existiert das gleiche Problem, ist ja auch durschaus logisch.
    Das mit der Zeitsteurung wäre ein möglichkeit, die ich aber eher ungern nutzen würde, ddann wie gesagt die runtime hängen bleibt, was bei einem SQL Timeout ja 20 Sekunden dauern würde, wenn der Server nicht gefunden wird.

    Gruß
    Matthias

  8. #8
    Join Date
    30.05.2007
    Location
    Salzburg
    Posts
    879

    Default Re: Seltsame Unhandled Exceptions

    Das mit der Zeitsteurung wäre ein möglichkeit, die ich aber eher ungern nutzen würde, ddann wie gesagt die runtime hängen bleibt, was bei einem SQL Timeout ja 20 Sekunden dauern würde, wenn der Server nicht gefunden wird.
    -> das ist natürlich richtig

    um das Ganze "sauber" zu machen, wäre die Idee nun jene, das SQL-Prozedere in PCE auszulagern.

    Für den SQL-Verbindungs-Check könnte hierfür z.B. eine Bool-Variable herangezogen werden, welche seitens PCE beschrieben wird (z.B. 1=Verbindung ok; 0=Fehler)

    Nachfolgend grob der dafür nötige PCE Code (VB-Script):
    'Initfunction
    Sub Task_Init()
    
    End Sub
    
    'The Mainfunction is a cyclic function
    Sub Task_Main()
    
    Dim objConn
    
    	On Error Resume Next
    	
    	Set objConn = CreateObject("ADODB.Connection")
    
        With objConn
          .Provider = "SQLNCLI.1"
          .Properties("Data Source") = "xxxxxxxx"
          .Properties("User ID") = "xxxxxxxx"
          .Properties("Password") = "xxxxxxxx"
          .Properties("Initial Catalog") = "xxxxxxxx"
          .Open
        End With
    
    	if objConn is nothing then
    		Task.Value("bSQLConnection")=0	
    	else
    	   	Task.Value("bSQLConnection")=1
    	End if
    
    	If Err <> 0 Then
    		Task.Value("bSQLConnection")=0
    	End if
    	
    	objConn.Close
    	Set objConn = Nothing
    End Sub
    
    'Exitfunction
    Sub Task_Exit()
    	objConn.Close
    	Set objConn = Nothing
    End Sub
    
    'Timerfunction
    Sub Task_Timer(lTimerId)
    
    End Sub

    bSQLConnection wäre die Bool Variable

    Gruß,
    Herbert

  9. #9

    Default AW: Seltsame Unhandled Exceptions

    Vielen Dank schon mal so weit, funktioniert soweit gut. Jetzt habe ich nur noch das Problem, dass ich nicht weiss wie man mittels VBS eine INI-Datei ausliest.
    "GetPrivateProfileString" bringt keinerlei reaktion, also natürlich mit Parametern aufgerufen.
    Die ini datei hätte folgenden Aufbau:
    [Verbindung]
    src=...
    usr=...
    pw=...

    Wäre nett wenn mir noch mal jemand helfen könnte, danke schon mal im voraus.
    Mfg
    Matthias

  10. #10

    Default AW: Seltsame Unhandled Exceptions

    Und inzwischen ist ein weiteres Problem hinzugekommen. Wenn ich
    Set objConn = CreateObject("ADODB.Connection")
    auch für ein Recordset mache, also
    Code:
    Set objRS = CreateObject("ADODB.recordset")
    dann kann ich nichts in dass Recordset schreiben, die Daten aus meiner Tabelle werden mir angezeigt, aber ich kann einfach nichts ändern in dem Recordset um es dann wieder in die Tabelle zu schreiben. Codeauszug:
    Sub Task_Main()
     
    Dim objConn
    Dim objRS
     
    	On Error Resume Next
     
    	Set objConn = CreateObject("ADODB.Connection")
    	Set objRS = CreateObject("ADODB.recordset")
     
        With objConn
          .Provider = "SQLNCLI.1"
          .Properties("Data Source") = "(local)\SQLEXPRESS"
          .Properties("User ID") = "xxx"
          .Properties("Password") = "xxx"
          .Properties("Initial Catalog") = "xxx"
          .Open
        End With
        With objConn
          .Execute "DELETE FROM Auswertung"
          .Execute "INSERT INTO Auswertung(Seit) VALUES ('Seit 24 Stunden')"
          .Execute "INSERT INTO Auswertung(Seit) VALUES ('Seit Gesamt')"
          .Execute "INSERT INTO Auswertung(Seit) VALUES ('Seit Programmerstellung')"
          .Execute "INSERT INTO Auswertung(Seit) VALUES ('Seit Reset')"
          .Execute "INSERT INTO Auswertung(Seit) VALUES ('Seit Startzeit')"
        End With
        With objRS
          .ActiveConnection = objConn
          .CursorLocation = adUseClient
          .CursorType = adOpenKeyset
          .LockType = adLockBatchOptimistic
          .Open "Auswertung"
          .MoveFirst
        End With
    
        objRS(1) = "Test"
        objRS.UpdateBatch
    ...
    Weiss jemand den Fehler? Wär wirklich sehr nett.
    Mfg
    Matthias

Posting Rules

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •