![]() |
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:
Danke für Antworten
// 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; mfg Schuby |
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. |
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'? |
AW: Mehrere Datensätze löschen
Und ich kann nur dazu raten, wenn irgend möglich SQL-Parameter zu benutzen.
Delphi-Quellcode:
(Aus dem Kopf getippt, daher ungetestet)
AdoQuery1.Close;
AdoQuery1.SQL.Text:= 'DELETE FROM person WHERE person.name = :name'; AdoQuery1.Parameters.ParamByName('name').AsString := Edit1.Text; |
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 |
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; |
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:
P.S.: Oder wie hoika es vorschlägt, Pluspunkt hier die Nutzung der Parameter
where <feldname> in ('Meier', 'Müller', 'Schulze')
P.S.2: Die exakte Schreibweise meines Vorschlags unter MS Access musst Du ggf. in der Dokumentation nachschlagen. |
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:
Die richtige var wird doch hier mit edit1.text übergeben oder ?
AdoQuery1.SQL.Text:= 'DELETE FROM person WHERE person.name = :name';
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 |
AW: Mehrere Datensätze löschen
Nach der Ausführen von
Delphi-Quellcode:
AdoQuery1.ExecSQL;
|
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 01:19 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