Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Löschen eines Datesatzes (https://www.delphipraxis.net/50967-loeschen-eines-datesatzes.html)

hansklok 3. Aug 2005 14:23


Löschen eines Datesatzes
 
Hi,
ich bin gerade dabei eine Bibliotheks-Datenbank zu schreiben. Man kann schon Titel hinzufügen, suchen etc. Nun platziere ich den Dateizeige wie folgt auf einen bestimmten Datensatz:

Delphi-Quellcode:
Reset(Datendatei); // öffnet Datendatei
Seek(Datendatei, 16); // setzt Dateizeiger auf den 16. Datensatz

... ?
CloseFile(Datendatei);
Kann mir bitte jemand ne Hilfestellung geben, wie ich nur diesen Datensatz (16.) entferne?

MfG

Hansklok

Kompon Ente 3. Aug 2005 14:25

Re: Löschen eines Datesatzes
 
Delphi-Quellcode:
Delete(Datendatei, 16)
?

hansklok 3. Aug 2005 14:29

Re: Löschen eines Datesatzes
 
... @ Janosch: Die Procedure entfernt einen Teilstring aus einem String:

Definition: procedure Delete(var S: string; Index, Count:Integer);

Ich möchte aber, wie du schon richtig erkannt hast, dass der 16. Datensatz, oder welcher auch immer gelöscht wird.

Luckie 3. Aug 2005 14:31

Re: Löschen eines Datesatzes
 
Letzten Datensatz an die Stelle des zu löschenden kopieren und die Datei um die Größe eines Datensatzes kürzen. Oder wenn sie sortiert beliben müssen, alle Datensaätze eins nach vorne kopieren und dann die Datei wieder verkürzen.

franktron 3. Aug 2005 14:32

Re: Löschen eines Datesatzes
 
Jetzt kommt das Prinzip von Datenbanken zum zuge.

Also du must ein Flag für gelöscht haben.


Dann kannst du noch ein Prog machen was ein Reorg. macht dazu must du einfach die DB Kopieren und die Gelöschet Datenzätze weg lassen.

hansklok 3. Aug 2005 14:34

Re: Löschen eines Datesatzes
 
@ Luckie: Aber
Delphi-Quellcode:
Truncate(Datendatei)
, ich hoffe du meinst dies, löscht doch alle datensätze, ab der Position, die ich zubvor mit
Delphi-Quellcode:
Seek
festlege!

Luckie 3. Aug 2005 14:37

Re: Löschen eines Datesatzes
 
Exakt. Und? Was willst du mehr?

Flocke 3. Aug 2005 14:47

Re: Löschen eines Datesatzes
 
Zitat:

Zitat von franktron
Jetzt kommt das Prinzip von Datenbanken zum zuge.

Also du must ein Flag für gelöscht haben.


Dann kannst du noch ein Prog machen was ein Reorg. macht dazu must du einfach die DB Kopieren und die Gelöschet Datenzätze weg lassen.

Klingt etwas chaotisch, aber franktron meint ein Vorgehen wie bei dBase-Dateien. Dort war das erste Byte in jedem Datensatz reserviert als Löschkennzeichen. So eine Datei ist also niemals geschrumpft, außer durch eine Reorgisation. Dadurch wird das Löschen aber wesentlich vereinfacht, weil du sonst wirklich JEDEN Datensatz einzeln nach unten schieben musst, wenn du mittendrin einen löscht.

[Nachtrag]

Bist du dir sicher, dass du das so machen willst und nicht einfach eine "richtige" Datenbank nimmst?

Jasocul 3. Aug 2005 14:53

Re: Löschen eines Datesatzes
 
Meine ersten Versuche (damals anno ...) habe ich auch so gemacht. Da hatte ich auch kein Ahnung von Datenbanken.
Du solltest unbedingt mit einem Löschkennzeichen arbeiten!
Bei einer Bibliotheks-DB kommen schonmal schnell ein paar Datensätze zusammen. Wenn du dann physisch löscht, wirds lustig. Ich hoffe, du kochst gerne Kaffee.

Ich weiß jetzt gar nicht, wie ich das auf meiner HP für das Beispiel mit typisierten Dateien gemacht habe, aber ich meine dort ist eine Löschfunktion drin.

Luckie 3. Aug 2005 14:55

Re: Löschen eines Datesatzes
 
Nun ja, das mit dem Löschflag sei mal dahingestellt, irgendwann wird er sie auch mal physisch löschen wollen und da denke ich wäre meine Methode eine Möglichkeit. Auf meiner Homepage findet sich übrigens auch eine Klasse für typisierte Dateien mit Datensatzlöschfunktion.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:01 Uhr.
Seite 1 von 2  1 2      

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