![]() |
Datenbank: MySql • Version: k.a. • Zugriff über: Zeoslib
Mehrere Datensätze löschen
Hi ich möchte nicht immer einzeln und mühsam die Datensätze löschen sondern alle auf einmal.
Ich verwende ein Listview und da gibt es ja Checkboxen, daher könnte man das ja hiermit recht einfach lösen. Bislang musste man es anklicken, also die ID und dann auf löschen und gelöscht ist es. Hier der aktuelle Code.
Delphi-Quellcode:
Es ist ja momentan so, dass wenn man auf die ID im Listview klickt, dass der Inahlt, also alles zugehörige zur ID in Edit felder geladen wird, das muss ja dann abgeschaltet werden und mit checkboxes gemacht werden, nur momentan weiß´ich echt nicht wie ich das anstellen soll.
begin
dbMain.Hostname:=edServer.Text; dbMain.User:=edLogin.Text; dbMain.Password:=edPasswort.Text; dbMain.Database:=edDB.Text; dbMain.Connected:=True; try qrMain.SQL.Text:='DELETE FROM adressbuch WHERE id='''+edID.Text+''';'; qrMain.ExecSql; finally dbMain.Connected:=False; Button6.Click; Button7.Click; end; end; Bestimmt mit ner schleife, wenn ihr mir helft wäre das echt gut. Ich probiere auch ma was. Das Problem ist erst mal dass die ID aus dem Listview ausgelesen wird und nicht aus dem Edit, da ja sonst immer nur eins gelöscht werden kann. mfg Seppel |
Re: Mehrere Datensätze löschen
Nur ein Denkansatz: zunächst in einer Schleife die ListView.Items durchgehen und auf Checked prüfen. Wenn Checked, dann eine Stringvariable setzen bzw. ergänzen. Nun im SQL das Gleichheitszeichen durch IN ersetzen und den zusammengesetzten String mit den kommaseparierten IDs in Klammern dahinterstellen, so dass das etwa so aussieht:
SQL-Code:
DELETE FROM adressbuch WHERE ID IN (1,2,5,8,789);
|
Re: Mehrere Datensätze löschen
Zitat:
Delphi-Quellcode:
Hab keinen Plan wie ich das dann durchlaufen lassen soll, bzw. später in den SQL Befehl eingeben soll.
if test.Checkboxes := true
then Add(test.Columns, i); |
Re: Mehrere Datensätze löschen
Ungetestet hingeklatscht:
Delphi-Quellcode:
var
i: integer; s: string; begin s := 'delete from table where id in ('; for i := 0 to listview.items.count - 1 do if listview.items[i].checked then if i = listview.items.count - 1 s := s + inttostr(i) else s := s + inttostr(i) + ','; s := s + ')'; // s sollte hier deine lösch-Abfrage sein. end; |
Re: Mehrere Datensätze löschen
Ein Beispiel:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i: integer; s: string; first: Boolean; SQL: string; begin s := ''; first := true; for i := 0 to ListView1.Items.Count - 1 do if ListView1.Items[i].Checked then begin if first then s := inttostr(i) //statt i hier eben die ID des Eintrags else s := s + Format(',%d',[i]); //s.o. first := false; end; if Length(s) > 0 then begin SQL := Format('DELETE FROM adressbuch WHERE ID IN(%s)',[s]); ShowMessage(SQL); end; end; |
Re: Mehrere Datensätze löschen
Zitat:
|
Re: Mehrere Datensätze löschen
Ja, richtig beobachtet. Habs zu spät gemerkt und jetzt sind eure Beiträge schon dagewesen.. :stupid:
Edit: Das
Delphi-Quellcode:
ist natürlich auch zu beherzigen, sonst löscht du eventuell sachen, die du eigentlich nicht löschen wolltest.
//statt i hier eben die ID des Eintrags
|
Re: Mehrere Datensätze löschen
Zitat:
|
Re: Mehrere Datensätze löschen
Die ID ist die Beschriftung des ListItems? Dann ist das ja einfach.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i: integer; s: string; first: Boolean; SQL: string; begin s := ''; first := true; for i := 0 to ListView1.Items.Count - 1 do if ListView1.Items[i].Checked then begin if first then s := ListView1.Items[i].Caption else s := s + Format(',%s',[ListView1.Items[i].Caption]); first := false; end; if Length(s) > 0 then begin SQL := Format('DELETE FROM adressbuch WHERE ID IN(%s)',[s]); ShowMessage(SQL); //hier dann halt ausführen end; end; |
Re: Mehrere Datensätze löschen
ok danke, habs verstanden.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:18 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 by Thomas Breitkreuz