![]() |
Re: Records löschen
danke,
ich werde mir mal dein Beispiel zu Gemüte führen.. Danke, bis dann |
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:
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:
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; |
Re: Records löschen
Du benutzt einen Typ :
Delphi-Quellcode:
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.
FILE OF Record irgendwas
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 ! |
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: |
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:
Wie kann ich den Satz komplett löschen?
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 |
Re: Records löschen
Kann mir da keiner Helfen?? Bitte bitte *euchanfleh* :?:
|
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.
|
Re: Records löschen
Ok, wird gemacht. THX
|
Re: Records löschen
Zitat:
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. |
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