AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Datensatz aus einer Typisierten Datei löschen
Thema durchsuchen
Ansicht
Themen-Optionen

Datensatz aus einer Typisierten Datei löschen

Ein Thema von gerritlober · begonnen am 17. Dez 2003 · letzter Beitrag vom 18. Dez 2003
Antwort Antwort
gerritlober

Registriert seit: 22. Nov 2003
Ort: Apelern
82 Beiträge
 
#1

Datensatz aus einer Typisierten Datei löschen

  Alt 17. Dez 2003, 07:07
Hallo,

wie kann ich einen Datensatz aus einer Typisierten Datei löschen?
Grüße
Gerrit
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Datensatz aus einer Typisierten Datei löschen

  Alt 17. Dez 2003, 07:52
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Datensatz aus einer Typisierten Datei löschen

  Alt 17. Dez 2003, 08:19
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.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
gerritlober

Registriert seit: 22. Nov 2003
Ort: Apelern
82 Beiträge
 
#4

Re: Datensatz aus einer Typisierten Datei löschen

  Alt 17. Dez 2003, 10:51
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.
Grüße
Gerrit
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Datensatz aus einer Typisierten Datei löschen

  Alt 17. Dez 2003, 16:10
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Brüggendiek

Registriert seit: 13. Dez 2002
Ort: Dortmund
275 Beiträge
 
Delphi 5 Standard
 
#6

Re: Datensatz aus einer Typisierten Datei löschen

  Alt 17. Dez 2003, 23:17
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
Dietmar Brüggendiek
  Mit Zitat antworten Zitat
Tool-Box
(Gast)

n/a Beiträge
 
#7

Re: Datensatz aus einer Typisierten Datei löschen

  Alt 17. Dez 2003, 23:32
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) ):

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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Datensatz aus einer Typisierten Datei löschen

  Alt 18. Dez 2003, 02:41
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Brüggendiek

Registriert seit: 13. Dez 2002
Ort: Dortmund
275 Beiträge
 
Delphi 5 Standard
 
#9

Re: Datensatz aus einer Typisierten Datei löschen

  Alt 18. Dez 2003, 21:59
Hallo!

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
Dietmar Brüggendiek
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Datensatz aus einer Typisierten Datei löschen

  Alt 18. Dez 2003, 22:02
Wenn man einen performanten Sortieralgorithmus hat... Aber wie gesagt, es wäre auch nur eine weitere Möglichkeit.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:30 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