Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Mehrere Datensätze löschen (https://www.delphipraxis.net/199324-mehrere-datensaetze-loeschen.html)

Schuby 15. Jan 2019 13:56

Datenbank: access • Version: 0.0 • Zugriff über: ADO

Mehrere Datensätze löschen
 
Sorry das ich Frage, aber ich sehe vor lauter Bäume den wald nicht mehr.

Ist es denn nicht Möglich mehrere Datensätze in einer Tabelle zu löschen ?

Tabellen access
ADOKomp


Delphi-Quellcode:
  // Edit1.text:= 'Müller';

  AdoQuery1.Close;
  ADOQuery1.SQL.Clear;
  AdoQuery1.SQL.Text:= 'DELETE FROM person WHERE person.name = ' + chr(39) + Edit1.text + chr(39) + ';' ;

  if (AdoQuery1.ExecSQL() = 1) then begin
    AdoQuery1.Close;
    AdoQuery1.SQL.Clear;
    ADOQuery1.SQL.Text := 'SELECT * FROM person';
    AdoQuery1.open;
  end else
  begin

  end;
Danke für Antworten

mfg Schuby

matashen 15. Jan 2019 14:05

AW: Mehrere Datensätze löschen
 
Hallo,

klar kannst du beliebig viele Datensätze löschen. Access läßt diese Information aber in der DB bis jemand ein komprimieren und bereinigen durchführt(heißt so oder so ähnlich - hab grad kein access da). Das heist die DB wird dann nicht kleiner, deine Select sehen nur den Eintrag nicht mehr.

Sonst zum löschen einfach den passenden SQL Ausdruck verwenden, dein Delete-Code sollte schon stimmen
da fehlt nur ein AdoQuery1.execsql;

EDIT: Hab ich in deiner Klammer übersehen, prüfe aber nicht auf 1 oder true sondern
if AdoQuery1.Execsql then begin;







Ach und anstatt Char(39) solltest du die funktion Quotedstr(meinString) verwenden.

jobo 15. Jan 2019 14:51

AW: Mehrere Datensätze löschen
 
Falls das Problem die "mehreren" sind:
Dein Ansatz kann mit "where name = "+ ..
maximal alle Personen löschen, deren Namen genau dem hinter dem + aufgeführten entspricht. In deinem Beispiel also exakte Gleichheit zum Inhalt von edit1.text (inkl. Leerzeichen usw.)

Was aus Deinem Beispiel nicht hervorgeht:
Was steht in Edit1.text?
'Müller, Meier, Schulze'?
' Meier'?
'> X'?

DeddyH 15. Jan 2019 15:17

AW: Mehrere Datensätze löschen
 
Und ich kann nur dazu raten, wenn irgend möglich SQL-Parameter zu benutzen.
Delphi-Quellcode:
AdoQuery1.Close;
AdoQuery1.SQL.Text:= 'DELETE FROM person WHERE person.name = :name';
AdoQuery1.Parameters.ParamByName('name').AsString := Edit1.Text;
(Aus dem Kopf getippt, daher ungetestet)

Schuby 15. Jan 2019 15:34

AW: Mehrere Datensätze löschen
 
@jobo ja zb MÜller Meier Schulze

@all

Danke für die Infos, ich muss das jetzt mal in ruhe testen.


mfg Schuby

hoika 15. Jan 2019 15:40

AW: Mehrere Datensätze löschen
 
Hallo,
wenn du die Query eh dynamisch zusammenbaust,
kannst du auch mehrere löschen.

Delphi-Quellcode:
AdoQuery1.Close;
AdoQuery1.SQL.Text:= 'DELETE FROM person WHERE (person.name = :name1) or (person.name = :name2)';
AdoQuery1.Parameters.ParamByName('name1').AsString := Edit1.Text;
AdoQuery1.Parameters.ParamByName('name2').AsString := Edit2.Text;

jobo 15. Jan 2019 15:45

AW: Mehrere Datensätze löschen
 
In Ruhe testen ist gut!

Mein Tipp dazu:
Bevor du ewig mit Delphi ausprobierst, lass es direkt in SQL laufen und finde das richtige Statement für Deinen Zweck.

Damit baust Du dann Delphi Code.

Wolltest Du direkt mehrere Namen löschen, wäre die Bedingung eher so:
Code:
where <feldname> in ('Meier', 'Müller', 'Schulze')
P.S.: Oder wie hoika es vorschlägt, Pluspunkt hier die Nutzung der Parameter
P.S.2: Die exakte Schreibweise meines Vorschlags unter MS Access musst Du ggf. in der Dokumentation nachschlagen.

Schuby 15. Jan 2019 16:21

AW: Mehrere Datensätze löschen
 
@DeddyH

Ich teste gerade deinen Code, am ende der zeile dies :name ist doch keine var das soll doch der bezeichner in der Datenbank sein ?
Delphi-Quellcode:
AdoQuery1.SQL.Text:= 'DELETE FROM person WHERE person.name = :name';
Die richtige var wird doch hier mit edit1.text übergeben oder ?
Delphi-Quellcode:
AdoQuery1.Parameters.ParamByName('name').AsString := Edit1.Text;

Dann müsste ich doch hiermit alles löschen was den Namen Müller und aus Berlin kommt

Delphi-Quellcode:
AdoQuery1.SQL.Text:= 'DELETE FROM person WHERE person.name = :name and person.ort = :ort';
AdoQuery1.Parameters.ParamByName('name').AsString := Edit1.Text; //Müller
AdoQuery1.Parameters.ParamByName('ort').AsString := Edit2.Text; //Berlin

mfg Schuby

mkinzler 15. Jan 2019 16:23

AW: Mehrere Datensätze löschen
 
Nach der Ausführen von
Delphi-Quellcode:
AdoQuery1.ExecSQL;

Schuby 15. Jan 2019 16:51

AW: Mehrere Datensätze löschen
 
Sorry ich verstehe es nicht, wenn ich diesen String zusammen baue.

Und nur 1 Datensatz in der Datenbank gefunden wird, bekomme ich keinen Fehler.
Werden aber 2 oder mehr Datensätze gefunden, dann bekomme ich einen Fehler
Bei if AdoQuery1.ExecSQL() = 1

Delphi-Quellcode:
  AdoQuery1.Close;
  ADOQuery1.SQL.Clear;

  AdoQuery1.SQL.Text:= 'DELETE FROM person WHERE person.name = :name and person.ort = :ort';

  AdoQuery1.Parameters.ParamByName('name').Value  := Edit1.text;
  AdoQuery1.Parameters.ParamByName('ort').Value   := Edit2.text;
 
 if AdoQuery1.ExecSQL() = 1 then begin




mfg Schuby


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:20 Uhr.
Seite 1 von 2  1 2      

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