Fatal Error aus DCBrowse

Moderator: Moderatoren

Antworten
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Fatal Error aus DCBrowse

Beitrag von Ewald »

Guten Tag zusammen,
ich bearbeite ein mehrdimensionales Array mit DCBROWSE.
Es werden Daten eingetragen und nach dem Speichern in eine Datenbank wird das bestehende Array wieder geleert und der nächste Beleg kann erfaßt werden.
Habe ich alles endos getestet und für fehlerfrei befunden. Aber wie es sich gehört bekomme ich ein paar Tage nach der Freischaltung beim Kunden diese Fehlermeldung zugeschickt. Das Programm hat sich nach ein paar erfaßte Belegen ohne Fehlermeldung verabschiedet - nicht jedoch, ohne ein XPPFATAL.LOG wegzuschreiben. Das folgt hier verkürzt. Die Zeile (B)DC_MergeBlocks(121) steht über 1200 x drin.
Das Array selbst wird am Anfang des Programmes erzeugt und besteht aus 15 Zeilen und 15 Spalten. Es wird im Programmablauf nicht mehr mit AADD oder ADEL verändert.

Code: Alles auswählen

FATAL ERROR LOG 
Stack Overflow
SYS Thread-ID: 600 
Module: EH
Error Codes: EH: 12 Sub: 0(0) OS: 0 XPP: 16
Call Stack of Thread 1 (600):
(B)DC_MergeBlocks(121)
= 1200 x im der Fehlermeldung
(B)DC_MergeBlocks(121)
@XBPBROWSE@I@DOSKIP(2068)
@XBPBROWSE@I@FORCESTABLE(1113)
@DC_XBPBROWSE@I@FORCESTABLE(928)
DC_BROWCELLEDIT(7732)
(B)DC_BrowCellBlock(7284)
_PROCESSHOTKEY(4138)
@DC_GETLIST@I@EVENTLOOP(3581)
@DC_GETLIST@I@READGUI(2961)
DC_READGUI(202)
MAIN(222)
Call Stack of Thread 2 (768):
File: X:\ZEITBELE.EXE
TimeStamp: 20110405 09:25
End of FATAL ERROR LOG.
Ich habe noch mal zu endlosen Tests angesetzt, kann das Programm selbst aber nicht zum Absturz bringen. Kann mir jemand sagen, was mir diese Fehlermeldung mitteilen will und wie sie wohl ausgelöst wird ?

Danke im Vorraus
Ewald
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Fatal Error aus DCBrowse

Beitrag von Tom »

Hallo, Ewald.

Zwei Empfehlungen: 1. Wenn Du ein Array, das mit DCBROWSE angezeigt wird, z.B. in einer Funktion änderst, empfiehlt es sich, anschließend mit DC_GetBrowArray(oBrowse,aArray) (oBrowse:RefreshAll() danach) die Datenquelle für DCBROWSE abermals zu setzen. Das ist vor allem dann wichtig, wenn Du das Array (scheinbar) in einer Funktion bearbeitest und die Funktion das Array zurückliefert. 2. In der XPJ-Datei in der Sektion "[PROJECT]" die Link-Flags ergänzen um einen erhöhten Stack-Wert, etwa so: /STACK: 5000000,10000. Aber eigentlich sieht der Fehler nach einer Endlosrekursion aus; das liegt vermutlich daran, dass der Array-Pointer im Browse-Objekt und der Arrayinhalt selbst nicht mehr übereinstimmen - siehe 1.
Herzlich,
Tom
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Fatal Error aus DCBrowse

Beitrag von Ewald »

Hallo Tom,
danke für die schnelle Einschätzung. Ich habe in der Tat einige Probleme beim Schreiben des Programmes gehabt. Z. B. habe ich nach einer Funktion im Programm versucht, das Eingabefeld in das erste Arrayelement oben links zu setzen. Das haute mit obrowse:gotop() nicht hin. Hat mich etwas gewundert, da ich das mit Datenbanken immer so gemacht habe und da ging es. DBF->gotop Obrowse:gotop und der Drops war gelutscht. Das Eingabefeld steht oben links.
Mit einem Array springt der Curosor zwar in die erste Zeile, verbleibt aber in der zuletzt beackerten Spalte. Also folgt jetzt nach dem obrowse:gotop() noch ein obrowse:firstcol() und dann ein obrowse:refreshall().
In diese Gegend werde ich mal DC_GetBrowarray ... einpflanzen. Schade nur, das ich das selbst nicht testen kann, da bei mir im Testnetz ja nichts passiert.
Eine hilflose Frage hätte ich dann noch.
Wenn ich wie gesagt ein Datenbank browse und in einer Funktion beacker, sage ich am Ende der Funktion DBF->gotop(),Obrowse:gotop() und alles ist in Butter. Muss ich im Array selbst den Pointer vielleicht auch irgendwie nach oben setzten damit er syncron mit dem Browse ist oder läuft das automatisch ? Ich hoffe, ich konnte diese Frage verständlich formulieren.
Gruß
Ewald
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Fatal Error aus DCBrowse

Beitrag von Tom »

Hallo, Ewald:

oBrowse:ArrayElement := nMeinPointer -> führt dazu, dass das Browse zu dieser Zeile "springt" (benutze ich beispielsweise in Suchfeldern zum Arraybrowse, aber auch bei Drag&Drop). Ein anschließendes ForceStable() hat sich bewährt. :wink:
Herzlich,
Tom
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2934
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Fatal Error aus DCBrowse

Beitrag von Wolfgang Ciriack »

Hallo Tom,
bei mir erzeugt der Wert
/STACK: 5000000,10000
ein "invalid number specified with option" /STACK ?????
Wo finde ich denn die Standard- und Max/Min-Werte zu STACK ?

OK, gefunden, Standard ist 1MB, aber Fehler bleibt.
Viele Grüße
Wolfgang
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Fatal Error aus DCBrowse

Beitrag von Tom »

In der [PROJECT]-Sektion:

Code: Alles auswählen

LINK_FLAGS    = /PM:PM /STACK:5000000,10000
Funktioniert bei mir seit Jahren. :wink:
Herzlich,
Tom
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2934
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Fatal Error aus DCBrowse

Beitrag von Wolfgang Ciriack »

Ja, irgendwie hatte ich wohl dicke Finger, jetzt klappts bei mir auch.

Mal sehen, ob ich damit einen alle 4-6 Wochen auftretenden Fehler mit Totalabsturz ohne Fatal Errorlog ausmerzen kann.
Viele Grüße
Wolfgang
Antworten