Seite 1 von 1

Fatal Error bei dbskip

Verfasst: Di, 04. Okt 2016 12:29
von Wolfgang Ciriack
Hallo,
ich erzeuge in einer Schleife Rechnungen, dabei hatte ich schon mal ab und zu Abstürze. Jetzt habe ich mal einen Fall, bei dem ich das immer wieder nachvollziehen kann und ich eine xppfatal.log bekomme.

Code: Alles auswählen

FATAL ERROR LOG 
Error within the error handling!
SYS Thread-ID: 2088 
Module: EXE
Error Codes: EH: 5 Sub: -1073741819(c0000005) OS: 0 XPP: 41
Call Stack of Thread 1 (944):
...
Call Stack of Thread 5 (2440):
ERZEUGRA(1508)
In der Zeile 1508 steht:

Code: Alles auswählen

(oFakt:sel2)->(dbskip())
Indexdateien sind ok (vor der Rechnungserzeugung neu aufgebaut), oFakt:sel2 hat den richtigen Wert.
Es passiert immer an derselben Stelle, nachdem ca. 77% der zu erzeugenden Rechnungen abgearbeitet sind.
Es scheint an der Menge der zu erzeugenden Rechnungen zu liegen.
Mit Benutzung des ADS ist dieser Fehler noch nicht vorgekommen.

Kann mir jemand etwas zu diesem Fehlercode sagen ?

Re: Fatal Error bei dbskip

Verfasst: Di, 04. Okt 2016 12:45
von brandelh
ERROR WITHIN THE ERRORHANDLING !

es passiert irgendwas, das zu einem Fehler führt.
Dieser Fehler trifft in der vermutlich eigenen ErrorSys auf einen Fehler, der einen Endlosaufruf der Fehlerbehandlung erzeugt bis der Stack überläuft.

Du musst versuchen den Weg in deiner Fehlerbehandlung nachzuvollziehen.
In einem ähnlichen Fall habe ich eine STATIC eingebaut die die Error-Aufrufe mitzählt und beim 5. Aufruf dann abbricht.
Ich würde das jeweilige errorobjekt, das übergeben wurde in der LOG-File aufbröseln um zu sehen was die ursprüngliche Fehlermeldung war.

Re: Fatal Error bei dbskip

Verfasst: Di, 04. Okt 2016 14:17
von Tom
Irgendwo im Callstack bzw. in den Callstacks ist auch die ErrorSys zu finden bzw. der Codeblock, je nachdem. Dort ist der jetzt "tödliche Fehler". Der ursprüngliche, diesen verursachende Fehler ist vermutlich ein ganz anderer. Du machst im ErrorSys etwas, das in dieser Fehlersituation nicht mehr geht. Variablen sind nicht initialisiert, Tabellen nicht offen, Objekte nicht vorhanden, weiß der Geier. Was Du siehst, ist ein Folgefehler.

Re: Fatal Error bei dbskip

Verfasst: Di, 04. Okt 2016 14:22
von Wolfgang Ciriack
Hallo Hubert,
ich bekomme ein "Interne Datenstruktur beschädigt" als Fehler bei Operation dbskip()
Meine Vermutung, es liegt an der Datenmenge ist falsch, es liegt nur an einem bestimmten Datensatz.
Klammer ich den von der Rechnungslegung aus, läuft alles durch.
Beim Ansehen des Datensatzes ist mir kein Unterschied zu anderen aufgefallen.
Muss ich weiter untersuchen.

Re: Fatal Error bei dbskip

Verfasst: Di, 04. Okt 2016 14:25
von brandelh
Index hast du schon neu aufgebaut, kopier doch mal die Datei in eine neue um und teste mit der.
? (Plattenfehler, wobei der eigentlich den Sektor treffen sollte) ?

wie groß ist die Datei und sind Memofelder drinn ?

Re: Fatal Error bei dbskip

Verfasst: Di, 04. Okt 2016 17:29
von AUGE_OHR
hi,

Hubert meint wohl
EXE = Expression Executer
* XppFatal Message: "Error within the error handling!"
- Error Codes: "EH: 5"/"Sub: -1073741819(c0000005)"/"XPP: 41"
- Error Codes: "EH: 1005"/"XPP: 15"
wenn die Stelle immer die selbe ist würde ich im Zweifel ein

Code: Alles auswählen

BEGIN SEQUENCE / RECOVER / END
einbauen und überprüfen ob das ALIAS dann noch aktive ist.

Re: Fatal Error bei dbskip

Verfasst: Di, 04. Okt 2016 19:25
von Wolfgang Ciriack
@Hubert,
keine Memo, Größe ca. 26000 Datensätze, etwa 22500 KB.
Indexdateien werden vorher explizit neu aufgebaut.
Dieselbe Funktion mit Anbindung an ADS, und es gibt keinen Fehler.
Ich kann den Datensatz auch im Programm editieren, keine Fehler.
Eine Rechnungsvorschau (andere Funktion), die über dieselben Datensätze läuft, kein Fehler.
Nur in meiner Schleife, in der ich Rechnungsnummern in die Datenbank schreibe, bricht immer
an derselben Stelle, beim gleichen Datensatz ab.
Alles sehr merkwürdig.

Re: Fatal Error bei dbskip

Verfasst: Di, 04. Okt 2016 19:27
von Martin Altmann
Wie sieht die betreffende Rechnungsnummer aus?
Wie ist die entsprechende Felddefinition?

Viele Grüße,
Martin

Re: Fatal Error bei dbskip

Verfasst: Di, 04. Okt 2016 20:07
von Wolfgang Ciriack
Nochmals geprüft, die sind ok.
Baue ich nach dem Schreiben ein unlock ein (statt am Ende der Schleife), so kommt der Fehler schon da, nicht erst beim dbskip.

Re: Fatal Error bei dbskip

Verfasst: Di, 04. Okt 2016 22:43
von Werner_Bayern
Servus Wolfgang,

deutet auch auf Netzwerkproblem und / oder Virenscanner hin. Kannst es testweise mal lokal laufen lassen und beim VS den EXE- und Datenpfad rausnehmen?

Re: Fatal Error bei dbskip

Verfasst: Mi, 05. Okt 2016 8:52
von Wolfgang Ciriack
Kein Netzwerk, alles lokal. Mit ausgeschaltetem Virenscanner keine Änderung.

Re: Fatal Error bei dbskip

Verfasst: Mi, 05. Okt 2016 9:06
von Wolfgang Ciriack
Der Fatal Error kommt immer beim Zugriff auf den gleichen Datensatz (dbskip oder unlock oder gather).
Starte ich nach dem Fatal Error meine Rechnungslegung erneut, so kann er ohne Probleme den entsprechenden Datensatz verarbeiten. Habe schon ein sleep in die Schleife eingebaut, Zugriffe umgestellt, etc. alles ohne Erfolg.

Re: Fatal Error bei dbskip

Verfasst: Mi, 05. Okt 2016 9:07
von Manfred
das mag jetzt vielleicht doof klingen, aber was passiert, wenn Du den Satz verschiebst? Wandert dann der Fehler an diese Stelle mit? Nur mal um zu sehen, ob es am Inhalt liegt. Also wäre es der Inhalt, oder ist es die Recno(). Das meine ich.

Re: Fatal Error bei dbskip

Verfasst: Mi, 05. Okt 2016 9:52
von Wolfgang Ciriack
Ich denke, es muss am Inhalt liegen. Wenn ich ein paar weniger Lieferscheine zur Faktura auswähle, kommt der Fehler trotzdem an diesem Datensatz. Nächster Versuch wird mal sein, nur diesen Datensatz zu fakturieren.

Re: Fatal Error bei dbskip

Verfasst: Mi, 05. Okt 2016 9:59
von brandelh
Das macht auch mich stutzig, dass es immer an diesem Datensatz auftritt.
Ich kann mir aber keinen Inhalt vorstellen der das auslösen darf, außer einem ungültigen Verweis auf eine Memodatei (oder waren das Aufhänger ?).

Wenn durch den Inhalt oder die RecNo() jedoch anderer Code ausgeführt würde, als normal, könnte dort eine Ursache sein,
aber beim Rechnungserstellen ist das ja eher unwahrscheinlich.

Re: Fatal Error bei dbskip

Verfasst: Mi, 05. Okt 2016 11:04
von Manfred
stimmt, er kommt an dem Datensatz, aber auch an der Recno(). Das eine schließt das andere nicht aus. Und wenn Du in einer Spielumgebung bis auf den Key alles aus dem Satz entfernst?

Re: Fatal Error bei dbskip

Verfasst: Mi, 05. Okt 2016 11:30
von brandelh
was passiert eigentlich wenn du die Datei in der gleichen Umgebung mit einem Testprogramm aufrufst ...

Code: Alles auswählen

set alternate test.txt // als Protokoll

use DieDummeDBF *** // Parameter wie bei der anderen
if neterr()
   ? "neterr"
else 
   do while ! eof()
       ? recno(), ... Felder...
       dbskip
   enddo
endif
? "Ging doch !"

Re: Fatal Error bei dbskip

Verfasst: Mi, 05. Okt 2016 15:31
von Wolfgang Ciriack
Also ich habe das jetzt reduziert auf 2 Lieferscheine, wenn diese beiden hintereinander fakturiert werden, tritt dieser Fehler auf, jetzt sogar mit Windowsmeldung "...funktioniert nicht mehr..".
Lesen der gesamten Datensätze in Schleife und Ausgabe an Bildschirm erzeugt keinen Fehler.
Lasse ich den einen Lieferschein davor weg, funktioniert alles.
Jetzt denke ich, werde ich doch mal eine komplett neue DBF erzeugen und die Datensätze einfügen.
Merkwürdig nur, das dieselbe Funktion nur mit ADS-Anbindung diesen Fehler nicht erzeugt...

Re: Fatal Error bei dbskip

Verfasst: Mi, 05. Okt 2016 16:00
von brandelh
rufst du in den Lieferscheinen fremde DLLs auf ?

Das soll ein Ursprung solcher Meldungen sein.

Re: Fatal Error bei dbskip

Verfasst: Mi, 05. Okt 2016 17:04
von Wolfgang Ciriack
Nein.

Re: Fatal Error bei dbskip

Verfasst: Mi, 05. Okt 2016 17:25
von Wolfgang Ciriack
Es wird noch verrückter: Drehe ich die Schleife um (for i:=Ende to 1 STEP -1) kommt der Fehler nicht.