Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Records löschen (https://www.delphipraxis.net/19644-records-loeschen.html)

TheMiller 6. Apr 2004 15:28

Re: Records löschen
 
danke,

ich werde mir mal dein Beispiel zu Gemüte führen..

Danke,

bis dann

TheMiller 6. Apr 2004 16:40

Re: Records löschen
 
Hi...

irgendwie funzt das nicht so...

Also, ich beschreibe es mal genauer...

Mein Programm lädt in eine ValueList alle Rezepte ein. Dort kann ich eins markieren und dann werden rechts die genauen Daten angezeigt (in Label1.Caption usw.). So, meine einladeprodzedur sieht so aus

Delphi-Quellcode:
procedure TForm1.LoadRezept;
begin
  Seek(RezeptFile, recnow-1);
  Read(RezeptFile, RRezept);

  with RRezept do begin
     Label19.Caption:=name;
     ...
     ...
     ...
     ValueListEditor1.InsertRow(name,Port ionen,true);
  end;
end;

for i:=1 to filesize(Rezeptfile) do begin
IF recnow = filesize(Rezeptfile) then recnow:=1 else inc(recnow);
loadRezept;
So wird alles eingeladen. Nun würde ich gerne ein Rezept in der Liste markieren können und dann löschen. Ich bekomme keinen vernünfitgen Code hin :wall:

Hansa 6. Apr 2004 20:38

Re: Records löschen
 
Du benutzt einen Typ :
Delphi-Quellcode:
FILE OF Record irgendwas
Das ist ähnlich wie bei einer Textdatei. Mit dem seek gehst Du an eine definierte Stelle der Datei. Das hat den Vorteil, daß Du nicht jedes mal sequentiell vom Anfang bis zu der Suchstelle sequentiell durchwandern mußt. Der Nachteil davon ist aber : die Datei an sich kann nicht aktualisiert werden. Bzw.: gelöschte Datensätze bleiben schon noch da und werden nur gekennzeichnet.

Deshalb hat man im Record ein Feld, das z.B. für einen Datensatz auf -1 steht und diesen dadurch als gelöscht kennzeichnet, obwohl er noch da ist. Im Programm muß nun dieses Feld rausgefiltert werden. Also alle Datensätze <> -1 werden angezeigt.

Weg kriegst du ihn dadurch, einen Reorganisationslauf durchzuführen, indem Satz für Satz in eine neue Datei eingefügt werden, sofern sie das Löschfeld <> -1 besitzen. Diese wird dann umkopiert und die gelöschten Sachen sind dann auch weg. Bei sensiblen Daten reicht auch das aber nicht !

Nicodius 7. Apr 2004 09:58

Re: Records löschen
 
sorry aber (ich mag das auch mal sagen ;) ) :dp: :warn: imemr nur ein Post (mit edit verändern) ;) sonst gilts(auch wenns nicht so gemeint ist) als pushen (das dein Thread unter den ersten 10 ist)



...



Ps.: ich schreib auch oft zwei hintereinander :tongue:

TheMiller 26. Mai 2004 15:37

Re: Records löschen
 
Hi,

ich muss dieses Thema mal wieder aufgreifen.

Ich habe jetzt einen Wert "Active". Wenn dieser Null ist, dann wird der Datensatz nicht angezeigt. Wenn ich einen neuen Datensatz erstelle, dann zeigt er mir den auch an, aber mit den Werten des Datensatzen mit Null.

BSP:
Delphi-Quellcode:
Aufgabe: Müll rausbringen
Beschreibung: Müll trennen
Datum: 26.05.2004
Active: 1

nachdem ich diesen Datensatz gelöscht habe, sieht der nächste so aus:

Aufgabe: Ins Büro fahren
Beschreibung: Müll trennen
Datum: 26.05.2004
Active: 1
Wie kann ich den Satz komplett löschen?

TheMiller 26. Mai 2004 17:28

Re: Records löschen
 
Kann mir da keiner Helfen?? Bitte bitte *euchanfleh* :?:

Luckie 26. Mai 2004 17:32

Re: Records löschen
 
Ich habe auf meiner Seite eine Unit mit einer Klasse, um mit typisierten dateien zu arbeiten, das sollte es tun. Entweder benutzt du sie direkt oder du kuckst dir an, wie ich es gelöst habe. Dabei habe ich es genauso gemacht, wie schon vorgeschlagen und kopiere den letzten Datensatz an die Stelle des zu löschenden Datensatzes und fertig.

TheMiller 26. Mai 2004 17:34

Re: Records löschen
 
Ok, wird gemacht. THX

shmia 26. Mai 2004 17:50

Re: Records löschen
 
Zitat:

Zitat von DJ-SPM
Kann mir da keiner Helfen??

Du brauchst einen kleinen Grundkurs. :stupid:
Also, wenn du eine Datei hast, kannst du nicht einfach aus der Mitte oder Anfang ein Stück
herausschneiden, ohne dass du einen relativ grossen (Kopier-)Aufwand hast.
Deshalb wird bei einer "richtigen" Datenbank ein Flag verwendet, das angibt, ob der Datensatz
gültig oder gelöscht ist. Beim DBase-Format ist dies z.B. das 1. Zeichen eines Record (' '=OK, '*'=Gelöscht).
Mit der Zeit enthält deine Datei immer mehr Löcher mit gelöschten Datensätzen.
Dann ist es an der Zeit die Datei zu komprimieren. Dazu braucht die Komprimierfunktion
nur die Satzlänge zu kennen.

Luckie gab den Vorschlag: "... und kopiere den letzten Datensatz an die Stelle des zu löschenden Datensatzes und fertig". (Zusätzlich muss man die Datei noch mit Truncate um einen Satz kürzen)
Dies ist relativ effektiv, allerdings wird die Reihenfolge der Datensätze geändert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:26 Uhr.
Seite 2 von 2     12   

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