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 Schuby · begonnen am 15. Jan 2019 · letzter Beitrag vom 15. Jan 2019
Antwort Antwort
Seite 1 von 2  1 2      
Schuby

Registriert seit: 25. Dez 2018
93 Beiträge
 
#1

Mehrere Datensätze löschen

  Alt 15. Jan 2019, 14:56
Datenbank: access • Version: 0.0 • Zugriff über: ADO
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
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
471 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Mehrere Datensätze löschen

  Alt 15. Jan 2019, 15:05
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.
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#3

AW: Mehrere Datensätze löschen

  Alt 15. Jan 2019, 15:51
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'?
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#4

AW: Mehrere Datensätze löschen

  Alt 15. Jan 2019, 16:17
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)
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
Schuby

Registriert seit: 25. Dez 2018
93 Beiträge
 
#5

AW: Mehrere Datensätze löschen

  Alt 15. Jan 2019, 16:34
@jobo ja zb MÜller Meier Schulze

@all

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


mfg Schuby
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Mehrere Datensätze löschen

  Alt 15. Jan 2019, 16:40
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;
Heiko

Geändert von hoika (15. Jan 2019 um 18:11 Uhr)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#7

AW: Mehrere Datensätze löschen

  Alt 15. Jan 2019, 16:45
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.
Gruß, Jo
  Mit Zitat antworten Zitat
Schuby

Registriert seit: 25. Dez 2018
93 Beiträge
 
#8

AW: Mehrere Datensätze löschen

  Alt 15. Jan 2019, 17:21
@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 ?
AdoQuery1.SQL.Text:= 'DELETE FROM person WHERE person.name = :name'; Die richtige var wird doch hier mit edit1.text übergeben oder ?
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Mehrere Datensätze löschen

  Alt 15. Jan 2019, 17:23
Nach der Ausführen von AdoQuery1.ExecSQL;
Markus Kinzler
  Mit Zitat antworten Zitat
Schuby

Registriert seit: 25. Dez 2018
93 Beiträge
 
#10

AW: Mehrere Datensätze löschen

  Alt 15. Jan 2019, 17:51
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 04:55 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