Autor Beitrag
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: 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. :D

_________________
Gruß
Hansa
LinzerASK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 135

WIN XP
Delphi 4, Delphi 2005
BeitragVerfasst: So 29.10.06 14:39 
Titel: Löschen eines Datensatzes
hallo!

kann ich den eintrag auf diese art löschen?

ausblenden 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 //bis vor die einzufügende Stelle nach hinten gehen


    p:=p^.nachbar;
    q^.nachbar:=p^.nachbar;
    p^.nachbar:=q;





end;
LinzerASK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 135

WIN XP
Delphi 4, Delphi 2005
BeitragVerfasst: So 29.10.06 16:50 
und kann man so etwas rauslöschen?
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 135

WIN XP
Delphi 4, Delphi 2005
BeitragVerfasst: So 29.10.06 17:13 
also mit meiner variante geht das nicht oder wie?

jetzt einfach dispose(autoamrke), dispose(model), etc?
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: So 29.10.06 17:22 
Dein Code löscht ja nichts, im Gegenteil, es wird ein neuer Eintrag erstellt:
ausblenden Delphi-Quelltext
1:
New(q);					

In der Schleife, diese aber zum Vorgängers, des zu löschenden Eintrags:
ausblenden Delphi-Quelltext
1:
    p:=p^.nachbar;					

ausblenden Delphi-Quelltext
1:
2:
3:
   q^ := p^.nachbar; //q ist Eintrag der gelöscht werden soll
    p^.nachbar:= q^.Nachbar; //Vorgänger zeigt nun auf Nachfolger
    Dispose( q); // Löscht q


Zitat:
jetzt einfach dispose(autoamrke), dispose(model), etc?
Nein Dispose löscht die ganze Auto-Struktur

_________________
Markus Kinzler.
LinzerASK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 135

WIN XP
Delphi 4, Delphi 2005
BeitragVerfasst: So 29.10.06 19:53 
also wie jetzt?
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: So 29.10.06 19:54 
user profile iconLinzerASK hat folgendes geschrieben:
also wie jetzt?

Was wie?

_________________
Markus Kinzler.
LinzerASK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 135

WIN XP
Delphi 4, Delphi 2005
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: So 29.10.06 20:10 
Hab ich doch oben beschrieben.

_________________
Markus Kinzler.
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 135

WIN XP
Delphi 4, Delphi 2005
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 135

WIN XP
Delphi 4, Delphi 2005
BeitragVerfasst: So 29.10.06 21:01 
@mkinzler:

das programm ist nun online!
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 135

WIN XP
Delphi 4, Delphi 2005
BeitragVerfasst: So 29.10.06 21:12 
@hansa

könntest du mir das bei meinem programm reinschreiben!

ich wäre dir so dankbar!
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: So 29.10.06 21:22 
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 135

WIN XP
Delphi 4, Delphi 2005
BeitragVerfasst: So 29.10.06 21:24 
also ich habe jetzt echt keinen plan mehr. danke für eure bemühungen.