Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Speicherfehler beim Schreiben & Lesen von Records (https://www.delphipraxis.net/54719-speicherfehler-beim-schreiben-lesen-von-records.html)

Kanne_Kaffe 10. Okt 2005 17:12

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.

Bernhard Geyer 10. Okt 2005 17:16

Re: Speicherfehler beim Schreiben & Lesen von Records
 
Zitat:

Zitat von Kanne_Kaffe
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.

Hast Du schon mal ADS Local Server bzw. Absolut Datbase angeschaut.
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.

Kroko1999 10. Okt 2005 17:29

Re: Speicherfehler beim Schreiben & Lesen von Records
 
Zitat:

Zitat von Kanne_Kaffe
Nein es handelt sich nur um diesen einen Record.

Jetzt funtz mit dem Schreiben und Lesen bis hier her. Aber das nächte Problem wird nicht lange auf sich warten lassen. Dank an alle.

Zitat:

Zitat von Kanne_Kaffe
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.

Ja was denn nu :?: :?: :?:

Kanne_Kaffe 10. Okt 2005 17:35

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:

Kanne_Kaffe 10. Okt 2005 17:57

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.

Sharky 10. Okt 2005 18:03

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.

Kanne_Kaffe 10. Okt 2005 18:35

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:
Reset(F)
nicht, da die Datei trotzdem neuangleget wird, bzw überschrieben wird.

Delphi-Quellcode:
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;
Welche Möglichkeiten habe ich noch ausser Append (geht ohnehin nicht) und Reset?

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.

marabu 10. Okt 2005 19:32

Re: Speicherfehler beim Schreiben & Lesen von Records
 
Hallo Kaffekanne
  • Nenne deinen Record nicht TFileInfo - das ist eine vordefinierte Struktur und eine Überdeckung ist nicht sinnvoll.
  • Wundere dich nicht, wenn Append() mit Direktzugriffsdateien nicht funktioniert - Append() ist für Textdateien gedacht.
  • Dann bliebe zu erwähnen, dass Direktzugriffsdateien veraltet sind. Borland rät zur Verwendung von TFileStream. Die Verwendung dieser moderneren Klasse geschieht analog zu untypisierten Dateien.
  • Mit festen Satzgrößen erzielst du eine schlechte Speicherplatzausnutzung, sobald variable Zeichenketten enthalten sind, da der maximale Platzbedarf reserviert werden muss.
  • Wenn du zur optimalen Speicherform deiner Daten beraten werden willst, dann musst du deine Anforderungen etwas systematischer rüber bringen.
Grüße vom marabu

Kanne_Kaffe 10. Okt 2005 23:50

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??

Kanne_Kaffe 11. Okt 2005 09:28

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:
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;
Wo ist das Problem? Ich fange langsam an an mir zuzweifeln...


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:28 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz