AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Kundenliste

Ein Thema von EdAdvokat · begonnen am 14. Apr 2017 · letzter Beitrag vom 22. Apr 2017
 
Hobbycoder

Registriert seit: 22. Feb 2017
1.002 Beiträge
 
#33

AW: Kundenliste

  Alt 21. Apr 2017, 18:42
Mach's dir doch nicht so schwer.
Definiert doch einfach in TCustomer die Funkton

Delphi-Quellcode:
RemoveFromDB(con: TZConnection); //Kannst die auch DeleteFromDB() nennen, oder auch HansWurst(), ist völlig egal.
var
  q: TZQuery;
begin
  q:=TZQuery.Create(nil);
  try
    q.sql.Text:='Delete from Customer where id=:id';
    q.params.parseSQL(q.sql.text, True);
    q.params.paramvalue['id']:=self.id;
    q.execSQL;
  finally
    q.free;
  end;
end;
Diese Funktion löscht den Datensatz mit der id aus der DB.
Und unter dem Button "Löschen" schreibst du jetzt einfach:

Delphi-Quellcode:
begin
  if ListView.Selected<>Nil then
  begin
    CustomerList[ListView.Selected.Index].RemoveFromDB(DBConnection);
    Customerlist[ListView.Selected.Index].Free;
    CustomerList.Delete(ListView.Selected.Index);
    ListView.Items.Delete(ListView.Selected.Index);
  end;
end;
(Das hab ich jetzt mal aus dem Kopf hier geschrieben. Kann sein, dass ich die Variablen nicht ganz korrekt benannt habe, ist halt ohne Codervervollständigung)
Zur Erklährung:
Als erstes sagst du dem Object in CustomerList, dass es sich selbst aus der DB löschen soll.
Danach gibt's du das Object Frei, weil du es ja nicht mehr brauchst (Laut Hilfe würde nämlich TObjectList.Delete nur den Eintrag löschen, nicht aber das Object selbst freigeben).
Anschließend wird eben mit CustomerList.Delete(...) eben der Eintrag aus der ObjectListe entfernt.
Und damit der Index der nachfolgenden ListView-Einträge wieder passt, wird auch die Zeile in der ListView gelöscht, somit ersparst du dir das neuladen über FuelleListView, was ja sehr lange dauert.

Die Hilfe dazu findest du, in dem im Sourcecode der Klasse auf dem Wort "TObjectList" den Cursor setzt und einfach mal F1 drückst. Dann
Dannach wählst du einen der beiden Einträge aus, entweder "System.Generics.Collections.TObjectList" oder "System.Contnrs.TObjectList". Welchen ist egal.
Dann findest du oben einen Link zu den Methoden. Und dort auch die Hilfe zu Delete.

Dort steht dann unter anderem:
Hinweis: Der für das Element reservierte Speicherplatz wird von Delete nicht freigegen.

Deswegen habe ich noch das Customerlist[ListView.Selected.Index].Free; mit eingebaut. Man könnte auch die Methode Notify der TObjectList aufrufen, so wie es in der Hilfe steht.
Möglicherweise könnte man das mit TObjectList.Remove() erledigen, denn da wird (glaube ich) das Object automatisch mit freigegeben. Probier es einfach mal aus.

Geändert von Hobbycoder (21. Apr 2017 um 18:45 Uhr)
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 18:25 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