Datensätze aus einer Datei löschen

Für Fragen von Einsteigern und Programmieranfängern...
Joachim Raap
Beiträge: 143
Registriert: Mo 30. Mär 2020, 12:37

Re: Datensätze aus einer Datei löschen

Beitrag von Joachim Raap »

Theo, Danke nochmals für Deine Hilfe
Ich habe die Procedure fürs Speichern wie folgt geändert weil ich nicht immer eine neue Datei erzeugen will (das macht wohl fmCreate) sondern nur Sätze anhängen möchte (dazu habe ich fmOpenWrite gefunden).So lange ich im Programm bin, werden alle neuen Sätze auch gezeigt. Beende ich das Programm und starte es neu, wird nur noch der jeweils letzte gelesen.
Beim speichern läuft da wohl was falsch-die Routine sieht wie folgt aus:

Code: Alles auswählen

procedure TFMGruppen.BTSpeichernClick(Sender: TObject);
 begin
  if (GrpSatz1.GrpNr>0) and (GrpSatz1.GrpName<>'')
   then begin
         MyList:=TGrpSatzList.Create;
         MyList.Add(GrpSatz1);
         MyList.SaveToFile('testfile.dat');   //Alles speichern
         MyList.Free;                         //MyList freigeben
         Fehlercode:=1;
         Fehlermeldung;
         Anzeigen;
        end
   else begin
         Fehlercode:=10;
         Fehlermeldung;
        end;
 end;             
Was ist hier falsch??

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Datensätze aus einer Datei löschen

Beitrag von theo »

Joachim Raap hat geschrieben: Do 3. Nov 2022, 20:45 Was ist hier falsch??
Alles!
Komm doch endlich mal von deiner Datei-Denke weg, das ist hier nur Beigemüse.

Das Zentrum deiner Anwendung ist die Liste und davon brauchst du genau eine, wie ich es dir hier gezeigt habe (unten):
viewtopic.php?p=130948#p130948
Die erstellst du in OnCreate und gibst sie in In OnDestroy wieder frei.
Am Anfang lädst du die ganzen Daten in die Liste mit LoadFromFile und am Ende, oder wenn du es für nötig hältst, speicherst du die ganzen Daten mit SaveToFile.
Sonst gibt es mit Files nichts zu tun!

Zwischenzeitlich arbeitest du nur auf der einen Liste (fMyList) im Speicher mit Add und Delete und was immer.
Du musst die Liste natürlich noch auf die ListView abbilden.

Hast du das Prinzip jetzt verstanden?

Joachim Raap
Beiträge: 143
Registriert: Mo 30. Mär 2020, 12:37

Re: Datensätze aus einer Datei löschen

Beitrag von Joachim Raap »

Grundsätzlich ja.
Vorher habe ich aus einer Datei alle gespeicherten Sätze gelesen und in einer ListView dargestellt. Neue oder geänderte Sätze wurden aber sofort in die Datei zurückgespeichert und natürlich in der ListView dargestellt.

Mit dem FileStream mache ich eigentlich das Gleiche - ich lese zu Beginn alle Sätze aus einer Datei, bilde sie in der ListView ab. Nur werden jetzt neue oder geänderte Sätze nicht mehr direkt gespeichert sondern liegen in der MyList, bis sie am Ende des Tages dann doch wieder gespeichert werden (müssen) damit beim nächsten Laden alle Sätze vorhanden sind. Zwischendurch hofft der reale geneigte User, daß es keine Stromausfälle gibt und seine Tagesarbeit verloren ist. Vermutlich hast Du als "Berufsprogrammierer" andere Erfahrungen - ich kann sie leider nicht wirklich nachvollziehen.
Ich programmiere diese fiktive Aufgabe nur zum Zweck, die IDE Lazarus kennenzulernen und meine zugegebenen eingerosteten Pascalkenntnisse aufzufrischen, in der OOP bisher ganz fehlt.

Dennoch, ich halte die direkte Arbeit mit einer Datei für besser (und sicherer) auch deswegen, weil der FileStream so wie ich ihn bis jetzt kennengelernt habe, auch nicht wirklich schneller ist (wahrscheinlich irgendwas im Millisekundenbereich). Den FileStream werde ich aber zu Ende bringen und darauf hoffen, weiterhin von Dir unterstützt zu werden......

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Datensätze aus einer Datei löschen

Beitrag von theo »

Joachim Raap hat geschrieben: Do 3. Nov 2022, 22:11 darauf hoffen, weiterhin von Dir unterstützt zu werden......
Du machst ja nie was man dir rät.
So ist's irgendwie sinnlos, findest du nicht?

Antworten