![]() |
Re: Speicherfehler beim Schreiben & Lesen von Records
Geht nicht. Da die Einträge mehre Million am Ende übersteigen. Bin schon von Paradox weg. Zu langsam und kann auch "nur" bis ca 260.000 Einträge verkraften. Dat reicht bei weitem nicht.
|
Re: Speicherfehler beim Schreiben & Lesen von Records
Zitat:
Haben DB's mit ADS Local Server am laufen in der mehrere Mio. Datensätze vorhanden sind und an die 4 GB Datei-Grenze von local Server gelanden. Und bei Verwendung von passenden Indexe ist diese Datenbank auch noch ziemlich schnell. |
Re: Speicherfehler beim Schreiben & Lesen von Records
Zitat:
Zitat:
|
Re: Speicherfehler beim Schreiben & Lesen von Records
Auch 4 Gig reichen auf Dauer nicht (Test haben das schon ergeben). Ich rechne im "Normalbetrieb" mit dem 10 fachen. Locker. Bei höherer Auslastung mit Dateien bis zu 80 Gig und mehr. Ich habe mir dafür sogar eine Extra-Platte gekauft. :lol:
|
Re: Speicherfehler beim Schreiben & Lesen von Records
@Kroko1999 Is schon richtig so wie ich es schreibe. Es ist nur dieser 1 Record. Aber in der Datei sollen am Ende eigiges verwaltet werden.
|
Re: Speicherfehler beim Schreiben & Lesen von Records
Hai Du Kanne voller Kaffe ;-)
Bei dieser Datenmenge würde ich in jedem Fall ein DB-System verwenden und nicht mit typisierten Dateien anfangen. Ausser dem von Bernhard vorgeschlagnem ADS Local Server gibt es sicher auch noch andere Systeme welche da besser geeignet sind. |
Re: Speicherfehler beim Schreiben & Lesen von Records
Und schon stehe ich vor einem anderen Problem. Da es immer noch das selbe Thema ist denke ich diesen Thread fortzusetzten. Also ich habe jetzt meine Schreib-Procedure entsrechend angepasst um die datei nimt immer neu anzulegen sonder hineinzuschrieben. Leider geht es mit
Delphi-Quellcode:
nicht, da die Datei trotzdem neuangleget wird, bzw überschrieben wird.
Reset(F)
Delphi-Quellcode:
Welche Möglichkeiten habe ich noch ausser Append (geht ohnehin nicht) und Reset?
procedure SchreibeDatei(Filename, Name, Adresse: String; Count: Cardinal);
begin New(FileInfo); FileInfo.Name := Name; FileInfo.Adresse := Adresse; FileInfo.Count := Count; { neuanlegen } if not FileExists(Filename) then begin AssignFile(F, Filename); ReWrite(F); write(F, FileInfo^); Closefile(F); end else begin {bzw. anhängen} AssignFile(F, Filename); // Append(F); // <- geht nicht Reset(F); // <- Datei wird hier trozdem neu angelegt. write(F, FileInfo^); Closefile(F); end; Dispose(FileInfo); end; Wenn jemand Datenbanken-Typen kennt die solche DatenMengen verarbeiten können bitte mal Posten. Weiteres Auswahlpunkt ist man muss sie auch ohne weitere Treiber betreiben können. 1 DLL etc. im Programpath / %systemroot% lasse ich mir auch noch gefallen. Aber eine Aufwendige Installation nicht. Das hast schon seine Gründe. |
Re: Speicherfehler beim Schreiben & Lesen von Records
Hallo Kaffekanne
|
Re: Speicherfehler beim Schreiben & Lesen von Records
@marabu: Thx für die vielen Tips. Ich werde wohl auf den FileStream umsatteln müssen. Ob das Projekt überhaupt was taugt an dem ich gerade arbeite wird sich erst in ein paar Monaten herausstellen. Übrigens variable Zeichenketten werden nicht verarbeit. Sie haben immer eine feste Grösse. Was ich hier an Code vorgestllet habe ist nur ein kleines programm zum besseren Verständis des Problems und hat nix mit meinem eigendlichen Projekt zutun.
Bratung zur optimalen Speicherform: Eine "richtige" DB wäre nicht schlecht bei dem ich direkt auf das Element / Eintarg zugreifen kann ohe die DB vorher durchsuchen zumüssen. Ferner muss sie wirklich grosse Mengen an Daten verkraften (80 Gig und grösser) und verwalten können sowie eine interne Komprimierung haben. Wer kennst sowas?? |
Re: Speicherfehler beim Schreiben & Lesen von Records
Ich habe jetzt mal umgestellt auf FileStream. Nur komischerweise stehe ich vor dem gleichen Problem. Die Datei wird immer wieder überschrieben, statt anzuhängen.
Delphi-Quellcode:
Wo ist das Problem? Ich fange langsam an an mir zuzweifeln...
procedure SchreibeDatei2(Filename, Name, Adresse: String; Count: Cardinal);
var iTemp: Integer; begin New(FileInfo); FileInfo.Name := Name; FileInfo.Adresse := Adresse; FileInfo.Count := Count; TmpStream := TFileStream.Create(Filename, fmCreate); TmpStream.Write(FileInfo^, SizeOf(TFileInfo)); iTemp := TmpStream.Position; // zur kontrolle iTemp := TmpStream.Size; // wurde was geschrieben? TmpStream.Free; Dispose(FileInfo); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz