AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Mehrere Datensätze löschen
Thema durchsuchen
Ansicht
Themen-Optionen

Mehrere Datensätze löschen

Ein Thema von Seppel · begonnen am 16. Nov 2007 · letzter Beitrag vom 16. Nov 2007
Antwort Antwort
Benutzerbild von Seppel
Seppel

Registriert seit: 14. Jun 2005
139 Beiträge
 
#1

Mehrere Datensätze löschen

  Alt 16. Nov 2007, 13:51
Datenbank: MySql • Version: k.a. • Zugriff über: Zeoslib
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:
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;
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.
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
Sebastian
www.seppel.de.pn
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Mehrere Datensätze löschen

  Alt 16. Nov 2007, 13:56
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:DELETE FROM adressbuch WHERE ID IN (1,2,5,8,789);
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Seppel
Seppel

Registriert seit: 14. Jun 2005
139 Beiträge
 
#3

Re: Mehrere Datensätze löschen

  Alt 16. Nov 2007, 14:12
Zitat von DeddyH:
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:DELETE FROM adressbuch WHERE ID IN (1,2,5,8,789);
So habe ich mir das gedacht, das mit den IDs is ja eh selbst erklärend, aber ich weiß jettzt net wie ich die inhalte dann in eine Stringvariable speichern soll, insgesammt wie ich das den prüfen soll.

Delphi-Quellcode:
if test.Checkboxes := true
  then

  Add(test.Columns, i);
Hab keinen Plan wie ich das dann durchlaufen lassen soll, bzw. später in den SQL Befehl eingeben soll.
Sebastian
www.seppel.de.pn
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#4

Re: Mehrere Datensätze löschen

  Alt 16. Nov 2007, 14:21
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;
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Mehrere Datensätze löschen

  Alt 16. Nov 2007, 14:22
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Seppel
Seppel

Registriert seit: 14. Jun 2005
139 Beiträge
 
#6

Re: Mehrere Datensätze löschen

  Alt 16. Nov 2007, 14:23
Zitat von wicht:
Ungetestet hingeklatscht:

Delphi-Quellcode:
var
  i: integer;
  sql: 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;
Werds testen, verstanden hab ich es, aber s soll entweder sql heißen oder s ist nicht definiert.^^
Sebastian
www.seppel.de.pn
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#7

Re: Mehrere Datensätze löschen

  Alt 16. Nov 2007, 14:26
Ja, richtig beobachtet. Habs zu spät gemerkt und jetzt sind eure Beiträge schon dagewesen..

Edit:
Das //statt i hier eben die ID des Eintrags ist natürlich auch zu beherzigen, sonst löscht du eventuell sachen, die du eigentlich nicht löschen wolltest.
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Benutzerbild von Seppel
Seppel

Registriert seit: 14. Jun 2005
139 Beiträge
 
#8

Re: Mehrere Datensätze löschen

  Alt 16. Nov 2007, 14:30
Zitat von wicht:
Ja, richtig beobachtet. Habs zu spät gemerkt und jetzt sind eure Beiträge schon dagewesen..

Edit:
Das //statt i hier eben die ID des Eintrags ist natürlich auch zu beherzigen, sonst löscht du eventuell sachen, die du eigentlich nicht löschen wolltest.
ja genau, nur wie soll ich das dann machen, ID ist in der ersten Colum, denn du meinst es ja so, dass ja i momentan einfach nur aus der Reihenfolge hergeht, das heißt das 1. hat dann die id 1 nur eigentlich hats ja vielleicht 5.
Sebastian
www.seppel.de.pn
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Mehrere Datensätze löschen

  Alt 16. Nov 2007, 14:50
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Seppel
Seppel

Registriert seit: 14. Jun 2005
139 Beiträge
 
#10

Re: Mehrere Datensätze löschen

  Alt 16. Nov 2007, 15:47
ok danke, habs verstanden.
Sebastian
www.seppel.de.pn
  Mit Zitat antworten Zitat
Antwort Antwort


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:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz