Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   DeleteSQL (https://www.delphipraxis.net/185958-deletesql.html)

p80286 22. Jul 2015 10:14

AW: DeleteSQL
 
Versuch es doch mal so:
Delphi-Quellcode:
 DataArtikelStanzen.IBDatabaseArtikelStanzen.Close;
 DataArtikelStanzen.IBDatabaseArtikelStanzen.SQL.Text:='delete from Tabelle where id=123456';
 DataArtikelStanzen.IBDatabaseArtikelStanzen.ExecSQL;
// vllt. noch die betroffenen Zeilen auslesen
 DataArtikelStanzen.IBDatabaseArtikelStanzen.Close;
Gruß
K-H

jobo 22. Jul 2015 10:21

AW: DeleteSQL
 
Zitat:

Zitat von p80286 (Beitrag 1309480)
Versuch es doch mal so:
Delphi-Quellcode:
 DataArtikelStanzen.IBDatabaseArtikelStanzen.Close;
 DataArtikelStanzen.IBDatabaseArtikelStanzen.SQL.Text:='delete from Tabelle where id=123456';
 DataArtikelStanzen.IBDatabaseArtikelStanzen.ExecSQL;
// vllt. noch die betroffenen Zeilen auslesen
 DataArtikelStanzen.IBDatabaseArtikelStanzen.Close;

Ich schätze, damit verbiegt man die Datenquelle des Dataset und macht es ~nur noch schlimmer.
MKINZLER hat schon die richtigen Hinweise gegeben. DeleteSQL ist nicht für den manuellen Aufruf gedacht, sondern implementiert die Umsetzung des Dataset.Delete.

Bernhard Geyer 22. Jul 2015 10:32

AW: DeleteSQL
 
Zitat:

Zitat von blawen (Beitrag 1309471)
Zitat:

Zitat von Luckner (Beitrag 1309468)
Delphi-Quellcode:
'delete from

Fehlt da nicht was?
Delphi-Quellcode:
delete * from...

Nö. Nur Pseudodatenbanken wie MS Access verlangen (teilweise) das * bei dieser DML-Anweisung

p80286 22. Jul 2015 10:36

AW: DeleteSQL
 
Zitat:

Zitat von jobo (Beitrag 1309481)
Zitat:

Zitat von p80286 (Beitrag 1309480)
Versuch es doch mal so:
Delphi-Quellcode:
 DataArtikelStanzen.IBDatabaseArtikelStanzen.Close;
 DataArtikelStanzen.IBDatabaseArtikelStanzen.SQL.Text:='delete from Tabelle where id=123456';
 DataArtikelStanzen.IBDatabaseArtikelStanzen.ExecSQL;
// vllt. noch die betroffenen Zeilen auslesen
 DataArtikelStanzen.IBDatabaseArtikelStanzen.Close;

Ich schätze, damit verbiegt man die Datenquelle des Dataset und macht es ~nur noch schlimmer.
MKINZLER hat schon die richtigen Hinweise gegeben. DeleteSQL ist nicht für den manuellen Aufruf gedacht, sondern implementiert die Umsetzung des Dataset.Delete.

Könntest Du mir das mal erklären?
Nach meinem Verständnis verbirgt sich hinter DataArtikelStanzen.IBDatabaseArtikelStanzen. eine Query und dann sollte das passen, oder hab ich da was in den falschen Hals bekommen?

Gruß
K-H

Luckner 22. Jul 2015 10:58

AW: DeleteSQL
 
Hinter "DataArtikelStanzen.IBDatabaseArtikelStanzen" verbirgt sich ein Dataset. Komisch, ich habe es schon so einigemale benutzt ohne Probleme. Auch ohne dem "where ...". Habe auch für ARTIKEL_ID eine 3 gesetzt, wie in der Tabelle. QuotedStr ist falsch an dieser Stelle (war nur ein Versuch).Immer wieder der selber Fehler.

Hier noch ein Beispiel:
Delphi-Quellcode:
  DataModuleAlternativMaterial.MatZuKunden_Grid.Close;
  DataModuleAlternativMaterial.MatZuKunden_Grid.DeleteSQL.Clear;
  DataModuleAlternativMaterial.MatZuKunden_Grid.DeleteSQL.Text := 'DELETE FROM MATZUKUNDEN WHERE MATERIALID LIKE ' + IntToStr(selectmaterial);
  DataModuleAlternativMaterial.MatZuKunden_Grid.Open;
und es funktioniert.

Delphi-Quellcode:
  DatamodulePlannung.DataModule5.IBDataSetGridPlannung.Close;
  DatamodulePlannung.DataModule5.IBDataSetGridPlannung.DeleteSQL.Clear;
  DatamodulePlannung.DataModule5.IBDataSetGridPlannung.DeleteSQL.Text := 'delete from PLANUNG';
  DatamodulePlannung.DataModule5.IBDataSetGridPlannung.Open;
  DatamodulePlannung.DataModule5.IBDataSetGridPlannung.Delete;
auch das funktioniert.

BadenPower 22. Jul 2015 11:17

AW: DeleteSQL
 
Zitat:

Zitat von Luckner (Beitrag 1309489)
Hinter "DataArtikelStanzen.IBDatabaseArtikelStanzen" verbirgt sich ein Dataset.
...
Immer wieder der selber Fehler.

Hast Du jetzt schon einmal überprüft, od die Datenmenge nach dem .Open überhaupt Datensätze enthält.

Die Fehlermeldung deutet darauf hin, dass die Datenmenge LEER ist und kein Datensatz nach dem .Open vorhanden ist.

Luckner 22. Jul 2015 11:20

AW: DeleteSQL
 
Mit " Label138.Caption := IntToStr(DataArtikelStanzen.IBDataSetArtikelStanze n.RecordCount); stelle ich fest, dass RecordCount = 0 ist, obwohl mindestens 2 Datensätze drin sind. Deshalb ist nichts zu löschen da. Also werde ich mir mal das Dataset anschauen.

Sir Rufo 22. Jul 2015 11:23

AW: DeleteSQL
 
Es ist immer ganz wichtig so wenig Query-Komponenten zu verwenden, wie nur irgend möglich. Am Besten nur eine verwenden, dann hat man das Golden Ring-Anti-Pattern perfekt umgesetzt.
Zitat:

One Query-Component to rule them all.
Dieser Unfug ist tatsächlich sehr verbreitet.

Warum keine
Delphi-Quellcode:
PlanungDeleteQuery
die fix und fertig da ist und ausschließlich zum Löschen von einem Planungsdatensatz vorhanden ist?

Eine Methode davor gebaut
Delphi-Quellcode:
procedure TMyDataModule.DeletePlanung( PlanungID: Integer );
begin
  PlanungDeleteQuery.ParamByName( 'ID' ).Value := PlanungID;
  PlanungDeleteQuery.ExecSQL;
end;
Evtl. viel zu einfach und zu sehr straight forward ...

p80286 22. Jul 2015 11:30

AW: DeleteSQL
 
@Sir Rufo
DRY?
Warum für 50 Fragestellungen 50 Querys definieren wenn 50 x SQLText reicht?

Gruß
K-H

Sir Rufo 22. Jul 2015 11:32

AW: DeleteSQL
 
Zitat:

Zitat von p80286 (Beitrag 1309503)
@Sir Rufo
DRY?
Warum für 50 Fragestellungen 50 Querys definieren wenn 50 x SQLText reicht?

Gruß
K-H

Wegen Prepared Statements => Performance?

Hier haben wir es allerdings mit einem SuperGAU zu tun. Die Query wird zur Anzeige von Daten verwendet und wird dann mal flugs umgebaut. Da kräuseln sich einem die Nackenhaare.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:23 Uhr.
Seite 2 von 3     12 3      

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