Autor |
Beitrag |
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: So 29.10.06 13:12
.Nachbar des Vorgängers auf .Nachbar des zu Löschenden setzen, dann kannst du den Eintrag freigeben.
_________________ Markus Kinzler.
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: So 29.10.06 14:08
Doppelpost. Selber gelöscht.
_________________ Gruß
Hansa
Zuletzt bearbeitet von hansa am So 29.10.06 14:16, insgesamt 1-mal bearbeitet
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: So 29.10.06 14:15
Du meinst jetzt wohl aus der Liste ? Dann wäre er das nächste mal doch wieder drin. Soll er dauerhaft aus der Liste verbannt werden, dann am besten in der zugrunde liegenden Tabelle löschen. Nur temporär aus der Liste löschen ? Hm, dann wird er später doch wieder gebraucht. Und dann ? Für diesen Fall würde ich eher für die Knoten der Liste die Datenstrukturen erweitern. Noch ein boolsches Feld kommt dazu : anzeigen : boolean; Der Benutzer kann dann per Button oder sonstwas den Wert anzeigen oder es eben unterdrücken. Mehr ist zu dieser unpräzisen Frage nicht zu sagen. Dass das Programm geschrieben wird, damit irgendwer es mal benutzt ist schon klar. 
_________________ Gruß
Hansa
|
|
LinzerASK 
      
Beiträge: 135
WIN XP
Delphi 4, Delphi 2005
|
Verfasst: So 29.10.06 14:39
Titel: Löschen eines Datensatzes
hallo!
kann ich den eintrag auf diese art löschen?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.Button5Click(Sender: TObject); var i:integer; begin
New(q);
p:=erster;
for i:=i to spinedit1.value do
p:=p^.nachbar; q^.nachbar:=p^.nachbar; p^.nachbar:=q;
end; |
|
|
LinzerASK 
      
Beiträge: 135
WIN XP
Delphi 4, Delphi 2005
|
Verfasst: So 29.10.06 16:50
und kann man so etwas rauslöschen?
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: So 29.10.06 16:53
auto zeigt auf zu Löschenden Eintrag
Dispose( auto);
gibt Eintrag frei.
Aber Achtung wie Hansa schon erwähnt hat, wird dann der entsprechende Eintrag in der DB (wenn vorhanden) nicht mitgelöscht.
_________________ Markus Kinzler.
|
|
LinzerASK 
      
Beiträge: 135
WIN XP
Delphi 4, Delphi 2005
|
Verfasst: So 29.10.06 17:13
also mit meiner variante geht das nicht oder wie?
jetzt einfach dispose(autoamrke), dispose(model), etc?
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: So 29.10.06 17:22
Dein Code löscht ja nichts, im Gegenteil, es wird ein neuer Eintrag erstellt:
Delphi-Quelltext
In der Schleife, diese aber zum Vorgängers, des zu löschenden Eintrags:
Delphi-Quelltext
Delphi-Quelltext 1: 2: 3:
| q^ := p^.nachbar; p^.nachbar:= q^.Nachbar; Dispose( q); |
Zitat: | jetzt einfach dispose(autoamrke), dispose(model), etc? |
Nein Dispose löscht die ganze Auto-Struktur
_________________ Markus Kinzler.
|
|
LinzerASK 
      
Beiträge: 135
WIN XP
Delphi 4, Delphi 2005
|
Verfasst: So 29.10.06 19:53
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: So 29.10.06 19:54
LinzerASK hat folgendes geschrieben: | also wie jetzt? |
Was wie?
_________________ Markus Kinzler.
|
|
LinzerASK 
      
Beiträge: 135
WIN XP
Delphi 4, Delphi 2005
|
Verfasst: So 29.10.06 20:07
was muss ich jetzt programmieren um den aktuell ausgewählten datensatz, der angezeigt wird auf meinen panels, löschen zu können - nicht aus der DB sondern nur temporär!
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: So 29.10.06 20:10
Hab ich doch oben beschrieben.
_________________ Markus Kinzler.
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: So 29.10.06 20:29
Mein Ansatz wäre immer noch : Eintrag nicht löschen, sondern lediglich kennzeichnen als gelöscht. So machen das alle DBs ! Geht das, egal warum nicht, dann hänge die Zeiger eben um. Das hat mkinzler schon skizziert. Ein Zeiger / Knoten der Liste ist lediglich eine Variable. Ich kann damit auch eine Wertzuweisung machen. Insofern ist es leicht möglich, vom Vorgänger direkt zum Nachfolger zu springen und dadurch einen Zeiger zu "überspringen". Es gibt auch Konstrukte wie : P^.Nachbar^.Nachbar^.Nachbar^. Das wird aber ohne Sicherheitsmaßnahmen wohl zu AVs führen. Deshalb geht man hin und führt Hilfsvariablen ein. Zeiger wird weitergereicht und Variable dann gelöscht.
_________________ Gruß
Hansa
|
|
LinzerASK 
      
Beiträge: 135
WIN XP
Delphi 4, Delphi 2005
|
Verfasst: So 29.10.06 20:55
ich lade jetzt einmal mein programm hoch damit ihr euch einmal einen besseren überblick habt:
wie folgt:
Einloggen, um Attachments anzusehen!
Zuletzt bearbeitet von LinzerASK am So 29.10.06 21:00, insgesamt 1-mal bearbeitet
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: So 29.10.06 20:58
Dann mach ne Schleife von 1 bis 2 (3-1). dann sthet in p der Vorgänger. dann speichere den nacgfolger von p (der zu löschende) in q. Biege den Nachfolger auf den nachfolger von q um. dadurch hast den Eintrag q (3.Eintrag) aus der Liste entfernt, und kannst in mit Dispose löschen.
_________________ Markus Kinzler.
|
|
LinzerASK 
      
Beiträge: 135
WIN XP
Delphi 4, Delphi 2005
|
Verfasst: So 29.10.06 21:01
@mkinzler:
das programm ist nun online!
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: So 29.10.06 21:02
Genau das ist doch mein Ansatz. Es ist völlig egal, was angezeigt wird. Die paar ausgeblendeten Knoten in der Liste sind völlig uninteressant. Die wichtigen sind trotzdem da. Du brauchst keine Zeiger umzuhängen usw. Alles kann auch leicht rückgängig gemacht werden durch setzen eines Bool-Feldes.
_________________ Gruß
Hansa
|
|
LinzerASK 
      
Beiträge: 135
WIN XP
Delphi 4, Delphi 2005
|
Verfasst: So 29.10.06 21:12
@hansa
könntest du mir das bei meinem programm reinschreiben!
ich wäre dir so dankbar!
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: So 29.10.06 21:22
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| type PAuto = ^Auto; Auto = Record Automarke, Model: String; Baujahr,Verkaufspreis : Integer ; Anzeigen: Boolean; Nachbar : PAuto; End; |
Nach dem Erzeugen:
Zitat: | p^.Anzeigen := True; |
Beim Durchschreiten der Liste nur die mit .Anzeigen := True; berrücksichtigen.
Statt Löschen:
Zitat: | q^.Anzeigen := False; |
_________________ Markus Kinzler.
|
|
LinzerASK 
      
Beiträge: 135
WIN XP
Delphi 4, Delphi 2005
|
Verfasst: So 29.10.06 21:24
also ich habe jetzt echt keinen plan mehr. danke für eure bemühungen.
|
|