Entwickler-Ecke

Datenbanken - Datensätze löschen


Hänsel - So 26.07.15 16:15
Titel: Datensätze löschen
Hallo, wer kann helfen?

ich möchte aus einer Tabelle alle Datensätze welche die Kennzeichnung 'A' haben und eine bestimmte Nummer (LA)aufweisen löschen


Delphi-Quelltext
1:
2:
3:
4:
5:
LA:=intToStr(Datamodule3.ADOQuery2['OBJ']) ;
FL:='A';
Datamodule3.ADOQuery_Mieter.Close;
DataModule3.ADOQuery_Mieter.SQL.Text:='Delete From MDV1 Where (obj='+LA+') and (KO_16='''+FL+''')';
DataModule3.ADOQuery_Mieter.Open;


dabei bekomme ich eine Fehlermeldung: Tabelle ADOQuery_Mieter .... CommoandText gibt keine Ergebnismenge zurück
Was habe ich da falsch gemacht?

Danke in Voraus
Hänsel

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Delete - So 26.07.15 17:51

Ein wenig Grundlagenwissen in der Entwicklung von Datenbank-Anwendungen könnte hier nicht schaden. Dafür empfehle ich stets die Datenbank-Tutorials beim Delphi-Treff [http://www.delphi-treff.de/tutorials/datenbanken/]. Dort findest du dann z.B. auch den Hinweis, daß SQL-Befehle, die Datenmengen zurückliefern – mit anderen Worten: Select-Anweisungen –, bei Query- und Dataset-Komponenten stets ein Open erfordern, dagegen SQL-Befehle, die eine Datenmanipulation vornehmen, mit ExecSQL [http://docwiki.embarcadero.com/Libraries/XE5/de/Data.Win.ADODB.TADOQuery.ExecSQL] auszuführen sind. Deine Fehlermeldung weist dich bereits darauf hin, daß ein SQL-Delete-Befehl keine Ergebnismenge zurückliefert.

Auch auf die Gefahr hin, mich zu wiederholen: Aus Sicht eines Anfängers stellt die Datenbank-Entwicklung eine ziemlich komplexe Thematik dar, die man nicht einfach so durch Ausprobieren und ohne Tutorials bewältigen kann.


haentschman - So 26.07.15 18:47

Hallo... 8)

...und wenn du schon beim Lesen bist, beschäftige dich mit Parametern (Stichwort: ParamByName z.B.) in welchen die Werte übergeben werden. Das erspart dir später viel Stress mit den Quote Orgien. :P


Hänsel - So 26.07.15 22:28

Danke für die Info.
Die Kritik an mein Wissen hat ja richtig gesessen. Aber Du hast ja auch irgendwann mal angefangen. Trotzdem danke.
Wenn ich noch ein Beispiel für meine Frage haben könnte, wäre nicht schlecht.

Nochmal's besten Dank

Hänsel


Delete - Mo 27.07.15 00:44

Du hast bereits die Tutorials durchgearbeitet und dabei keine Beispiele gefunden? Die Tutorials bestehen doch eigentlich nur aus Beispielen, was darauf schließen läßt, daß du dir die Mühe mit den Tutorials nicht machen möchtest, sondern lieber funktionierenden Code hättest. Und ja, ich habe auch mal angefangen und Tutorials durchgearbeitet. Übrigens heißt es "an meinem Wissen" ...

Aber jetzt sag mal echt: was hast du daran, daß du statt des Open-Befehls einfach ExecSQL verwenden mußt, nicht verstanden? Soll ich dir etwa deine Codezeilen umschreiben oder schaffst du das dann doch noch selber?


Hänsel - Mi 29.07.15 14:11

Danke. Hat funktioniert.

Hänsel


Delete - Mi 29.07.15 14:15

Statt deiner "Hochkomma-Orgie" beim Erstellen eines SQL-Statements, das eine nicht-numerischen Wert enthält, könntest du auch einfach die Funktion QuotedStr [http://docwiki.embarcadero.com/Libraries/XE5/de/System.SysUtils.QuotedStr](MyString) verwenden. Gibt's auch als Ansi-Version [http://docwiki.embarcadero.com/Libraries/XE5/de/System.AnsiStrings.QuotedStr].


baumina - Mi 29.07.15 14:21

Mit Parametern arbeiten, dann kann man sich die Quoterei (Anführungszeichen-Panik) komplett sparen.


OlafSt - Mi 29.07.15 15:02

...und man gerät auch nicht in die Gefahr, irgendwo eine Option auf SQL-Injection einzubauen.