Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.431 Beiträge
 
Delphi 7 Professional
 
#39

AW: Preisanpassung

  Alt 13. Jan 2023, 14:40
Du benötigst doch nur das Datum. Warum dann select * from ARTIKELPREISE order by Datum ?

Dazu benötigst Du nur den höchsten Datumswert, da wäre doch eventuell ein select max(Datum) as Datum from ARTIKELPREISE angebracht.

QuotedStr ist für Pascal/Delphi, aber (eigentlich) nicht für SQL, auch wenn's da meist klappt, da scheint mir der Verwendung von Parametern eher angebracht.
Delphi-Quellcode:
DatamoduleArtikel.DataModule1.IBDataSetArtikelpreiseGrid.SelectSQL.Add('select ID_ARTIKEL, ARTIKELNR, GRUNDPREIS, DATUM from ARTIKELPREISE WHERE DATUM = :datum ORDER BY ARTIKELNR');
DatamoduleArtikel.DataModule1.IBDataSetArtikelpreiseGrid.ParamByName('Datum').AsDateTime := DatumPreiserhoehung;
Statt select * from nutze ich immer select Liste der tatsächlich benötigten Spalten from . Warum soll mir die Datenbank 1000ende Werte liefern, wenn ich nur einen oder 4 oder ... benötige?
Und weiterer Vorteil: Wenn mal wer die Datenbankstruktur ändert und es gibt eine Spalte nicht mehr, so erhalte ich hier einen entsprechenden, verständlichen SQL-Fehler und nicht irgendwo eine Schutzverletzung, wenn z. B. ein persistentes Feld noch Nil ist oder sowas in der Richtung. Und den Inhalt von neuen Spalten, den ich im Programm nicht benötige, muss mir die Datenbank auch nicht liefern

Keine Ahnung, ob (mit Deinen Datenbankkomponenten und FireBird zusammen) sowas sinngemäß funktionieren könnte:
Delphi-Quellcode:
DatamoduleArtikel.DataModule1.IBDataSetArtikelpreiseGrid.SQL.Add('insert into ARTIKELPREISE select ID_ARTIKEL, ARTIKELNR, GRUNDPREIS * :faktor as GRUNDPREIS, :datum_neu as DATUM from ARTIKELPREISE where datum = :datum');
DatamoduleArtikel.DataModule1.IBDataSetArtikelpreiseGrid.ParamByName('datum').AsDateTime := DatumPreiserhoehung;
DatamoduleArtikel.DataModule1.IBDataSetArtikelpreiseGrid.ParamByName('datum_neu').AsDateTime :=
StrToDate(JvDateDatePreisanpassung.Text);
DatamoduleArtikel.DataModule1.IBDataSetArtikelpreiseGrid.ParamByName('faktor').AsFloat := faktor;
DatamoduleArtikel.DataModule1.IBDataSetArtikelpreiseGrid.ExecSQL;

Geändert von Delphi.Narium (13. Jan 2023 um 14:49 Uhr) Grund: Fehler behoben, keine Gewähr, dass jetzt fehlerfrei ;-)
  Mit Zitat antworten Zitat