Speicherabstürze beim Datensatz-Handling im Speicher
Verfasst: 21.10.2004 20:35
Hallo liebe PB-Freunde
ich halte und nutze in meinem Logbuchprogramm
Datensätze (über 16000) im Speicher. Dabei stellte
ich fest, dass auf meinem Rechner mit WinME alles
korrekt abläuft (zumindest meistens), aber auf einem
anderen Rechner mit Win2000 NICHT! Wie kann das
sein? Wo habe ich noch einen Fehler?
In verkürzter Form habe ich das Listing malnachstehend
aufgeführt.
16300 Datensätze je 121 Byte Länge (feste Feldlänge)
werden in den Speicher eingelesen.
Danach wird ein weiterer Datensatz mit 121 Byte zu-
sätzlich in den Speicher geschrieben, gewissermassen
angehängt.
Zum Schluss sollen alle Datensätze als gepackte Datei
auf der Platte gesichert werden (Backup)
Das läuft in meinem Programm natürlich nicht immer
so der Reihenfolge nach ab, hier nur verkürzt.
Bitte um Hilfe, dass den Fehler jemand findet, DANKE
Hier das Listing:
WICHTIG: Der Absturz bei Win2000 kommt fast immer nur
bei Punkt 3.: Alle Datensätze aus dem Speicher als gepackte
BackUp Datei auf der Platte sichern!!
Gruss
Gerhard
ich halte und nutze in meinem Logbuchprogramm
Datensätze (über 16000) im Speicher. Dabei stellte
ich fest, dass auf meinem Rechner mit WinME alles
korrekt abläuft (zumindest meistens), aber auf einem
anderen Rechner mit Win2000 NICHT! Wie kann das
sein? Wo habe ich noch einen Fehler?
In verkürzter Form habe ich das Listing malnachstehend
aufgeführt.
16300 Datensätze je 121 Byte Länge (feste Feldlänge)
werden in den Speicher eingelesen.
Danach wird ein weiterer Datensatz mit 121 Byte zu-
sätzlich in den Speicher geschrieben, gewissermassen
angehängt.
Zum Schluss sollen alle Datensätze als gepackte Datei
auf der Platte gesichert werden (Backup)
Das läuft in meinem Programm natürlich nicht immer
so der Reihenfolge nach ab, hier nur verkürzt.
Bitte um Hilfe, dass den Fehler jemand findet, DANKE
Hier das Listing:
Code: Alles auswählen
; Hauptprogramm
;1.Datensätze aus dem Datenfile in den Speicher lesen
; Zur Zeit sinds etwa 16300 Datensätze je 121 Byte fester
; Feldlänge
;==============================================
Global Bytes.l, qso.s
If ReadFile(0,"logbuch.txt")<>0
Bytes.l=Lof()
*MemoryBuffer=AllocateMemory(1,Bytes,0)
ReadData(*MemoryBuffer,Bytes)
CloseFile(0)
EndIf
;==============================================
;2.Einen weiteren Datensatz mit fester Feldlänge von
; 121 Bytes in den Speicher lesen (alle Datensätze haben
; feste Feldlänge von 121 Bytes
qso.s="xxxxxxxxxx+n";insgesamt 121 Bytes hier abgekürzt!
Bytes=Bytes+121
*StrAdr=ReAllocateMemory(1,Bytes) ;Alte Speicherdaten behalten
*HilfsBuffer=*StrAdr+(Bytes-121)
PokeS(*HilfsBuffer,qso,121) ;Ein QSO mit 121 Byte dazuspeichern
;==============================================
;3.Eine Datensicherung der gesamten Datensätze (16300+1)
; als gepackte Datei vom Speicher machen und auf der Platte .
; speichern. Der Dateiname beinhaltet das Datum.
CreatePack("logbuch_"+tag+"."+monat+"."+jahr+".pak")
*SpeichQSO=ReAllocateMemory(1,Bytes)
AddPackMemory(*SpeichQSO,Bytes)
ClosePack()
Endbei Punkt 3.: Alle Datensätze aus dem Speicher als gepackte
BackUp Datei auf der Platte sichern!!
Gruss
Gerhard