Interne Datenstrukturen beschädigt
Moderator: Moderatoren
Interne Datenstrukturen beschädigt
Im Netzwerkbetrieb bekomme ich unregemäßig beim Schließen von Dateien mit dem Befehl USE vorher Select mit Dateiname (select SDKUNDE) bzw. beim Select auf eine Datei (select SDKUNDE) die Fehlermeldung BASE/5 interne Datenstrukturen beschädigt. ´Die Dateien sind definitiv offen entweder shared oder exclusiv. Bei der Anwendung handelt es sich um eine allte Clipper-Anwendung die mit x-Base compiliert wurde. Unter Clipper traten die Fehler nie auf. Was kann mann machen um den Fehler zu unterbinden.
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1930
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Interne Datenstrukturen beschädigt
hi,
anderes als Windows.
gruss by OHR
Jimmy
Was für ein Netzwerk ? Opportunistic locking ?ulrich Krause hat geschrieben: Im Netzwerkbetrieb bekomme ich unregemäßig beim Schließen von Dateien mit dem Befehl USE vorher Select mit Dateiname (select SDKUNDE) bzw. beim Select auf eine Datei (select SDKUNDE) die Fehlermeldung BASE/5 interne Datenstrukturen beschädigt.
Das ist ja auch eine DOS Anwendung und funktioniert bei sperren ganzulrich Krause hat geschrieben: Unter Clipper traten die Fehler nie auf.
anderes als Windows.
gruss by OHR
Jimmy
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1930
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland
Der Runtime-Error "Interne Datenstrukturen beschädigt" hat nach Aussage des Supportes von Alaska NICHTS mit DBF-Dateien zu tun, sondern mit Problemen im Arbeitsspeicher (der Begriff ist verwirrend).
Angeblich kann ein solcher Runtime-Error nur nach "unsachgemäßem" Gebrauch der C-Api oder DLL-Calls von Fremd-DLLs (nicht Xbase-Dlls) auftreten. Ich kenne diese "Internen Datenstrukturen" zu hauf. In der Tat konnte ich das Auftreten bei meinen Kunden reduzieren. Ich hatte z. B. eine zeitlang eine BAP.DLL benutzt, die nicht zur verwendeten Xbase-Version gepasst hat. Durch die Verwendung der richtigen BAP.DLL wurde die Anzahl der "Interne Datenstrukturen"-Abstürze deutlich verringert.
Eine weitere Ursache scheint es zu sein, wenn es bei Aufruf von Nicht-Xbase-Dlls (wir verwenden z. B. eine Delphi-DLL) zu Exceptions innerhalb der Dll kommt, die dort nicht abgefangen sind. Auch damit lassen sich "Interne Datenstrukturen"-Abstürze produzieren.
Laut Aussage des Supportes muss übrigens der Absturz nicht unmittelbar nach dem Aufruf der Fremd-Dll-Funktion (oder C-API) kommen, sondern evtl. auch später, weil eben ein Speicherbereich korumpiert ist.
Angeblich kann ein solcher Runtime-Error nur nach "unsachgemäßem" Gebrauch der C-Api oder DLL-Calls von Fremd-DLLs (nicht Xbase-Dlls) auftreten. Ich kenne diese "Internen Datenstrukturen" zu hauf. In der Tat konnte ich das Auftreten bei meinen Kunden reduzieren. Ich hatte z. B. eine zeitlang eine BAP.DLL benutzt, die nicht zur verwendeten Xbase-Version gepasst hat. Durch die Verwendung der richtigen BAP.DLL wurde die Anzahl der "Interne Datenstrukturen"-Abstürze deutlich verringert.
Eine weitere Ursache scheint es zu sein, wenn es bei Aufruf von Nicht-Xbase-Dlls (wir verwenden z. B. eine Delphi-DLL) zu Exceptions innerhalb der Dll kommt, die dort nicht abgefangen sind. Auch damit lassen sich "Interne Datenstrukturen"-Abstürze produzieren.
Laut Aussage des Supportes muss übrigens der Absturz nicht unmittelbar nach dem Aufruf der Fremd-Dll-Funktion (oder C-API) kommen, sondern evtl. auch später, weil eben ein Speicherbereich korumpiert ist.
Gruß
Markus
Mitglied der XUG Saarland-Pfalz
Markus
Mitglied der XUG Saarland-Pfalz
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
über das öffnen von DBF´s und da gibt es auch die Meldung.
Wenn man Probleme bei USE, CLOSE, GOTO() oder ähnlichen hat sollte
man zuerst seine DBESYS.PRG erweitern und das timeing hochsetzten.
Wenn das Problem dann noch im M$ Netzwerk auftaucht muss man die
Opportunistic locking setting setzten bzw. bei Novell TurboFAT überprüfen.
gruss by OHR
Jimmy
Das was du meinst bezieht sich auf activex. Der Thread hier geht aberMarkus Walter hat geschrieben: Der Runtime-Error "Interne Datenstrukturen beschädigt" hat nach Aussage des Supportes von Alaska NICHTS mit DBF-Dateien zu tun, sondern mit Problemen im Arbeitsspeicher (der Begriff ist verwirrend).
über das öffnen von DBF´s und da gibt es auch die Meldung.
Wenn man Probleme bei USE, CLOSE, GOTO() oder ähnlichen hat sollte
man zuerst seine DBESYS.PRG erweitern und das timeing hochsetzten.
Wenn das Problem dann noch im M$ Netzwerk auftaucht muss man die
Opportunistic locking setting setzten bzw. bei Novell TurboFAT überprüfen.
gruss by OHR
Jimmy
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland
Hi Jimmy,
das was ich meine hat auch nichts mit activex zu tun. Diese Fehlermeldung kenne ich schon aus früheren Xbase-Zeiten (1.7 / 1.82).
Und ich kann mich nur wiederholen: Laut Aussage des Alaska-Supports haben diese Fehler nichts mit dem DBE-Subsystem zu tun, sondern deuten immer auf einen ungültigen Speicherbereich hin, der angeblich nicht durch reinen Xbase-Code entstehen kann, sondern nur nach Benutzung der C-Api oder externen DLL-Funktionen. So hat Alaska das mir gegenüber immer dargestellt. Durchaus kann es aber sein, dass der Runtime-Error dann irgendwann im Code auftritt (nachdem der Speicherbereich korumpiert ist), auch eben bei DB-Funktionen.
Und meine eigenen Beobachtungen bestätigen dies:
- falsche BAP.DLL führte vermehrt zu diesem Error
- mit "schlecht programmierten" Fremd-Dll-Funktionen kann man den Error produzieren.
das was ich meine hat auch nichts mit activex zu tun. Diese Fehlermeldung kenne ich schon aus früheren Xbase-Zeiten (1.7 / 1.82).
Und ich kann mich nur wiederholen: Laut Aussage des Alaska-Supports haben diese Fehler nichts mit dem DBE-Subsystem zu tun, sondern deuten immer auf einen ungültigen Speicherbereich hin, der angeblich nicht durch reinen Xbase-Code entstehen kann, sondern nur nach Benutzung der C-Api oder externen DLL-Funktionen. So hat Alaska das mir gegenüber immer dargestellt. Durchaus kann es aber sein, dass der Runtime-Error dann irgendwann im Code auftritt (nachdem der Speicherbereich korumpiert ist), auch eben bei DB-Funktionen.
Und meine eigenen Beobachtungen bestätigen dies:
- falsche BAP.DLL führte vermehrt zu diesem Error
- mit "schlecht programmierten" Fremd-Dll-Funktionen kann man den Error produzieren.
Gruß
Markus
Mitglied der XUG Saarland-Pfalz
Markus
Mitglied der XUG Saarland-Pfalz
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1930
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Rolf,
eine DLL wird immer erst im aktuellen Verzeichnis gesucht und dann im Pfad (der Reihe nach).
Viele Grüße,
Martin
eine DLL wird immer erst im aktuellen Verzeichnis gesucht und dann im Pfad (der Reihe nach).
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
es auch im anderen Zusammenhang.
in der Art in seiner Application hat, den dazu ist die eigendliche Frage
nach BASE/5 doch echt zu simple (und tausend mal beantwortet was
man mit der DBESYS.PRG machen muss)
schon mal No. #9 und No. #11 unter Novell getested ? (Client NW 4.91x)
gruss by OHR
Jimmy
war nur ein Verweis das man da die "selbe" Fehlermeldung bekommtMarkus Walter hat geschrieben: das was ich meine hat auch nichts mit activex zu tun.
grundsätzlich hast du recht, aber wie schon gesagt "die" Meldung gibtMarkus Walter hat geschrieben: Und ich kann mich nur wiederholen: Laut Aussage des Alaska-Supports haben diese Fehler nichts mit dem DBE-Subsystem zu tun, sondern deuten immer auf einen ungültigen Speicherbereich hin, der angeblich nicht durch reinen Xbase-Code entstehen kann, sondern nur nach Benutzung der C-Api oder externen DLL-Funktionen.
es auch im anderen Zusammenhang.
das ist der BASE/5 Error meistens mit Gencode 41ulrich Krause hat geschrieben: Im Netzwerkbetrieb ... beim Schließen von Dateien mit dem Befehl USE
... BASE/5 interne Datenstrukturen beschädigt.
es geht also um DBF USE0005 - [BASE] - ???
Associated with: "41:Internal data structures corrupted"
Caused by: Various things, including: "Memory(0)", ":UpdateBuffer()",
"AppEvent()", "ValType()", etc.
Remarks: Also in Fatal Error Logs: "EH: 5"/"OS: 0"/"XPP: 41",
"Function: atmStartGCThread(void*)", "Module: ATM"
yup, aber wie schon gesagt ich glaube nicht das Ulrich überhaupt etwasMarkus Walter hat geschrieben: Und meine eigenen Beobachtungen bestätigen dies:
- falsche BAP.DLL führte vermehrt zu diesem Error
- mit "schlecht programmierten" Fremd-Dll-Funktionen kann man den Error produzieren.
in der Art in seiner Application hat, den dazu ist die eigendliche Frage
nach BASE/5 doch echt zu simple (und tausend mal beantwortet was
man mit der DBESYS.PRG machen muss)
du meinst den No. #9 ?Tom hat geschrieben: Und wenn 1.9: Hotfix zur NTXDBE.DLL eingespielt?
schon mal No. #9 und No. #11 unter Novell getested ? (Client NW 4.91x)
gruss by OHR
Jimmy
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
gruss by OHR
Jimmy
zu einbinden in Xbase++ ApplicationMartin Altmann hat geschrieben: eine DLL wird immer erst im aktuellen Verzeichnis gesucht und dann im Pfad (der Reihe nach).
gruss by OHR
Jimmy
Code: Alles auswählen
*+²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²
*+
*+ Genius by Günter Beyes and Auge & OHR, Jimmy
*+
*+ Functions: Procedure dllVER()
*+
*+²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²
#include "dll.ch"
#include "Directry.ch"
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Procedure main()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
PROCEDURE main()
dllVER()
RETURN
PROCEDURE dllVER
LOCAL aDLLfiles := DIRECTORY("*.DLL") // local *.DLL files
LOCAL nPosi // > 0 found in aDLLlist
LOCAL lFlag := .F. // external DLLload()
LOCAL cWinDir := GETENV("windir") // windows path
LOCAL cWinSys := GETENV("windir")+"\system32" // windows\system32 path
LOCAL cXppPath := GETENV("XPPROOT")+"LIB" // XPP LIB path
LOCAL I
LOCAL J
LOCAL nLast := 1
LOCAL DllName // name of Dll
LOCAL hDll // handle of DLLload()
LOCAL aVersion // Array Version
LOCAL fVersion // Array Version
LOCAL cDLLpath // DLL load Path
LOCAL aDLLlist := {{"ADAC20B.DLL" ,4},; // if you have more DLL
{"ADAC20C.DLL" ,4},;
{"ASCOM10.DLL" ,4},;
{"ASCOM10C.DLL" ,4},;
{"ASLOGRESOURCE.DLL",4},;
{"ASRDBC10.DLL" ,4},;
{"BAP.DLL" ,4},;
{"CDXDBE.DLL" ,4},;
{"DBFDBE.DLL" ,4},;
{"DELDBE.DLL" ,4},;
{"EVENTSPY.DLL" ,4},;
{"FOXDBE.DLL" ,4},;
{"MEMWATCH.DLL" ,4},;
{"NTXDBE.DLL" ,4},;
{"SDFDBE.DLL" ,4},;
{"SOM.DLL" ,4},;
{"XPPDBGC.DLL" ,4},;
{"XPPNAT.DLL" ,4},;
{"XPPRT1.DLL" ,4},;
{"XPPRT2.DLL" ,4},;
{"XPPUI1.DLL" ,4},;
{"XPPUI2.DLL" ,4},;
{"XPPUI3.DLL" ,4}} // include your DLL here
SET ALTER TO DLLVER.TXT
SET ALTER ON
FOR I := 1 TO LEN(aDLLfiles)
//
// find local DLL in aDLLlist
//
nPosi := ASCAN(aDLLlist,{| x | x[1] = TRIM(UPPER(aDLLfiles[I,F_NAME])) })
IF nPosi > 0
//
// set local flag
//
aDLLlist[nPosi][2] = 1
ELSE
//
// add local DLL to aDLLlist
//
AADD(aDllList,{aDLLfiles[I,F_NAME],1})
ENDIF
NEXT
//
// where DLL might can be load from
//
FOR I := 1 TO LEN(aDllList)
DllName := aDllList[I][1]
DO CASE
CASE aDllList[I][2] = 1
CASE FILE(ConvToAnsiCP(cWinSys+""+DllName))
aDllList[I][2] = 2
CASE FILE(ConvToAnsiCP(cWinDir+""+DllName))
aDllList[I][2] = 3
CASE FILE(ConvToAnsiCP(cXppPath+""+DllName))
aDllList[I][2] = 4
OTHERWISE
aDllList[I][2] = 5
ENDCASE
NEXT
//
// now sort it
//
ASORT( aDllList,,, {|aX,aY| str(aX[2])+aX[1] < str(aY[2])+aY[1] })
FOR I := 1 TO LEN(aDllList)
IF .NOT. (nLast = aDllList[I][2])
nLast := aDllList[I][2]
? REPLICATE("-",77)
? ""
ENDIF
//
// use this DLL
//
DllName := aDllList[I][1]
DO CASE
CASE aDllList[I][2] = 1
? "*** LOCAL *** "+DllName
CASE aDllList[I][2] = 2
? "*** SYS * "+cWinSys+""+DllName
CASE aDllList[I][2] = 3
? "*** WIN * "+cWinDir+""+DllName
CASE aDllList[I][2] = 4
? "*** LIB * "+cXppPath+""+DllName
OTHERWISE
? DllName+" not found"
ENDCASE
//
// if not allready automatic load
//
IF !DllInfo(DllName,DLL_INFO_LOADED)
hDll := DllLoad(DllName,NIL,.T.)
lFlag := .T.
ENDIF
//
// get handle and load Information into Array
//
hDll := DllInfo(DllName,DLL_INFO_HANDLE)
fVersion := LoadResource(1,hDll,RES_VERSIONFIXED)
aVersion := LoadResource(1,hDll,RES_VERSION)
cDLLpath := DllInfo( hDll, DLL_INFO_PATHNAME )
? "load from "+cDLLpath
? ""
//
// Main Information
//
IF LEN(fVersion) > 0
? "Product Version: "+LTRIM(STR(fVersion[RES_PRODVER_MS]))+LTRIM(STR(fVersion[RES_PRODVER_LS]))
? " File Version: "+LTRIM(STR(fVersion[RES_FILEVER_MS]))+LTRIM(STR(fVersion[RES_FILEVER_LS]))
? " File Time: "+LTRIM(STR(fVersion[RES_FILETIME_MS]))+LTRIM(STR(fVersion[RES_FILETIME_LS]))
ELSE
? "Product Version: "+"no Information"
? " File Version: "+"no Information"
? " File Time: "+"no Information"
ENDIF
//
// Detail Information
//
IF LEN(aVersion) > 0
FOR J := 1 TO LEN(aVersion)
? aVersion[J][RES_VERSION_KEY]+": "+aVersion[J][RES_VERSION_VALUE]
NEXT
ELSE
ENDIF
? ""
//
// when using DLLload() so DLLUnload now
//
IF lFlag
lFlag := .F.
DllUnload(hDll)
ENDIF
NEXT
SET ALTER OFF
SET ALTER TO
RunShell( "DLLVER.TXT", "NOTEPAD.EXE", .T. )
RETURN
*+ EOF: DLLVER.PRG
Erstmal vielen Dank für die unterschiedlichen Lösungsansätze.
Ich habe in der Zwischenzeit auch einiges ausprobiert. Meine Test und auch einige Veränderungen habe zu einer Verbesserung geführt. Ich habe die richtigen Einstellungen und dll's. Daran kann es nicht liegen. Es muss in irgendeiner Form an der Speicherbelegung und Verwaltung liegen. Ich habe einen Fehler, das eine offene Datei mit dem selct Befehl nicht angesprochen werden kann einmal produzieren können und zwar in dem ich mehr als 100 mal sehr schnell von einen Menü in ein anderes verzweigt bin. Immer nur durch den Tastendruck von ESC und ENTER. Irgendwann habe ich dann ein Menü Aufgerufen, das als erstes einen select auf eine offene Datei macht. Es kam zu Absturz mit dem gencode 66 "Datenbank Alias existiert nicht" operation dbselcarea. Dies kann nicht sein, da die Datenbank immer offen ist und nie im Programm geschlossen wird.
Ich habe in der Zwischenzeit auch einiges ausprobiert. Meine Test und auch einige Veränderungen habe zu einer Verbesserung geführt. Ich habe die richtigen Einstellungen und dll's. Daran kann es nicht liegen. Es muss in irgendeiner Form an der Speicherbelegung und Verwaltung liegen. Ich habe einen Fehler, das eine offene Datei mit dem selct Befehl nicht angesprochen werden kann einmal produzieren können und zwar in dem ich mehr als 100 mal sehr schnell von einen Menü in ein anderes verzweigt bin. Immer nur durch den Tastendruck von ESC und ENTER. Irgendwann habe ich dann ein Menü Aufgerufen, das als erstes einen select auf eine offene Datei macht. Es kam zu Absturz mit dem gencode 66 "Datenbank Alias existiert nicht" operation dbselcarea. Dies kann nicht sein, da die Datenbank immer offen ist und nie im Programm geschlossen wird.
Zuletzt geändert von ulrich Krause am Do, 11. Okt 2007 16:37, insgesamt 1-mal geändert.
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Ulrich,
die Meldung kommt aber auch, wenn Du eine Datei öffnest, die bereits exklusiv geöffnet ist!
Viele Grüße,
Martin
die Meldung kommt aber auch, wenn Du eine Datei öffnest, die bereits exklusiv geöffnet ist!
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.