Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Datensatz aus einer Typisierten Datei löschen (https://www.delphipraxis.net/13367-datensatz-aus-einer-typisierten-datei-loeschen.html)

gerritlober 17. Dez 2003 06:07


Datensatz aus einer Typisierten Datei löschen
 
Hallo,

wie kann ich einen Datensatz aus einer Typisierten Datei löschen? :wiejetzt:

Luckie 17. Dez 2003 06:52

Re: Datensatz aus einer Typisierten Datei löschen
 
IUch nehme an du hast ein dynamisches Array von deinem Record. Kopier den letzten Datensatz an die Stelle, des zu löschenden und verkürz dein Arry um eins.

Desweiteren ist es Object pascal Frage und dahin geht die Reise jetzt auch.

MrSpock 17. Dez 2003 07:19

Re: Datensatz aus einer Typisierten Datei löschen
 
Hallo gerritlober,

du kannst einen Satz nicht direkt löschen. Du kannst nur eine neue Datei erstellen und den zu löschenden Satz debei weglassen. Eleganter ist aber ein Löschkennzeichen mitzuführen und den Satz dann später ggf. zu überschreiben.

gerritlober 17. Dez 2003 09:51

Re: Datensatz aus einer Typisierten Datei löschen
 
Und Wie mache ich das nun mit dem Löschkennzeichen,
wie führe ich das mit und wie entferne ich dann endgültig den Datensatz?
Am besten wäre glaube ich ein Source-Code.

In 7 Tagen ist Weihnachten

Ich schreibe eine Datei mit einem Record-Typ. Nebenbei gesagt. :pale:

Luckie 17. Dez 2003 15:10

Re: Datensatz aus einer Typisierten Datei löschen
 
In dem du einfach noch ein Boolean Feld in dein Record einfügst, der den Datensatz als gelöscht oder nicht gelöscht kennzeichnet. Löschen dann wie MrSpock oder ich vorgeschlagen haben.

Brüggendiek 17. Dez 2003 22:17

Re: Datensatz aus einer Typisierten Datei löschen
 
Hallo!

Das Erstellen einer neuen Datei ist nicht nötig!

Man kann auch alle folgenden Datensätze um 1 hochrutschen lassen und die Datei dann verkürzen.

Der Aufwand ist abhängig von der Position des Datensatzes:
weit vorne bedeutet Kopieren der Datei weniger Positionierungsaufwand, weit hinten ist das "nach vorne holen" schneller, weil nur die folgenden Datensätze bearbeitet werden müssen.

Aus diesem Grund arbeiten Datenbanken ja auch mit einer "Gelöscht"-Kennzeichnung und benutzen beim Neuanlegen den ersten freien Datensatz.

Eine Löschkennzeichnung kann auch über eine irgendwie ungültige Datenzusammenstellung erfolgen - bei einer Adressliste z.B. Leerstring beim Namen.

Gruß

Dietmar Brüggendiek

Tool-Box 17. Dez 2003 22:32

Re: Datensatz aus einer Typisierten Datei löschen
 
So sieht die Lösung unter Turbo-Pascal 7.0 aus (denke, dass dies bei Object Pascal auch noch ein wenig funzen sollte (zumind. bis Delphi 7) :mrgreen: ):

Delphi-Quellcode:
Procedure Datensatz_Spiel_77_loeschen;

begin
   Anz := Filesize(f_2)-1;

If Anz > 0 then begin

   For i2 := i0 to Anz - 1 do begin
       Seek(f_2, i2+1); Read(f_2, Spiel_77);
       Seek(f_2, i2); Write(f_2, Spiel_77);
       end;

       i2 := Anz;
       Seek(f_2, i2);
       Truncate(f_2);
       Anz := Filesize(f_2)-1;
If i0 > Anz then i0 := i2 - 1;

       Seek(f_2, i0);
       Read(f_2, Spiel_77);
       Daten_Spiel_77_sichten;
       GotoXY(22,23);
       Write('Selektierter Datensatz wurde gel”scht !        ');
       GotoXY(22,23);
   end;
end;
Gruss, Tool-Box :wink:

Luckie 18. Dez 2003 01:41

Re: Datensatz aus einer Typisierten Datei löschen
 
Zitat:

Zitat von Brüggendiek
Man kann auch alle folgenden Datensätze um 1 hochrutschen lassen und die Datei dann verkürzen.

Oder wie ich vorgeschlagen habe, den letzten an die Stelle des zu löschenden kopieren. .wink:

BTW auf meiner Seite findest du eine Klasse, die dir das ganze Handling ab nimmt bei den Downloads: TTypeedFilesClass oder so ähnlich.

Brüggendiek 18. Dez 2003 20:59

Re: Datensatz aus einer Typisierten Datei löschen
 
Hallo!

Zitat:

Zitat von Luckie
Oder wie ich vorgeschlagen habe, den letzten an die Stelle des zu löschenden kopieren.

Ob das geeignet ist, kann nur der Programm-Ersteller wissen. Vielleicht sind die Datensätze ja in irgendeiner Form sortiert gespeichert und "den letzten in die Mitte" wirft die Sortierung durcheinander!

Beispiel wäre eine Terminverwaltung, bei der der Benutzer Termine löschen kann. Beim Einfügen müßte dann übrigens alles Weitere nach unten kopiert werden.

Gruß

Dietmar Brüggendiek

Luckie 18. Dez 2003 21:02

Re: Datensatz aus einer Typisierten Datei löschen
 
Wenn man einen performanten Sortieralgorithmus hat... Aber wie gesagt, es wäre auch nur eine weitere Möglichkeit.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:31 Uhr.

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