Einzelnen Beitrag anzeigen

Luckner

Registriert seit: 28. Nov 2006
Ort: Berlin
418 Beiträge
 
Delphi 7 Enterprise
 
#38

AW: Preisanpassung

  Alt 13. Jan 2023, 15:00
Habe jetzt folgende Routine geschrieben:

Delphi-Quellcode:
  Faktor := 1 + StrToFloat(JvEditPreiszuschlag.Text)/100; //Preiszuschlag ist in % für alle Artikel
  ShowMessage('Faktor ist ' + FloatToStr(Faktor));

  DatamoduleArtikel.DataModule1.IBDatabaseArtikel.Connected := False; //Hier wird das Datum der letzten Preiserhöhung ermittelt
  DatamoduleArtikel.DataModule1.IBDataSetArtikelpreiseGrid.Close;
  DatamoduleArtikel.DataModule1.IBDataSetArtikelpreiseGrid.SelectSQL.Clear;
  DatamoduleArtikel.DataModule1.IBDataSetArtikelpreiseGrid.SelectSQL.Add('select * from ARTIKELPREISE order by Datum');
  DatamoduleArtikel.DataModule1.IBDataSetArtikelpreiseGrid.Open;
  DatamoduleArtikel.DataModule1.IBDataSetArtikelpreiseGrid.Last;

  DatumPreiserhoehung := DatamoduleArtikel.DataModule1.IBDataSetArtikelpreiseGridDATUM.AsDateTime;
  DatamoduleArtikel.DataModule1.IBDataSetArtikelpreiseGrid.Close;
  ShowMessage('Datum der letzten Preisehöhung ist ' + DateToStr(DatumPreiserhoehung));

  DatamoduleArtikel.DataModule1.IBDataSetArtikelpreiseGrid.SelectSQL.Clear; //Alle Artikelpreise seit der letzten Preisanpassung ermitteln
  DatamoduleArtikel.DataModule1.IBDataSetArtikelpreiseGrid.SelectSQL.Add('select * from ARTIKELPREISE WHERE DATUM = ' + QuotedStr(DateToStr(DatumPreiserhoehung)) + ' ORDER BY ARTIKELNR');
  DatamoduleArtikel.DataModule1.IBDataSetArtikelpreiseGrid.Open;
  DatamoduleArtikel.DataModule1.IBDataSetArtikelpreiseGrid.FetchAll;
  ShowMessage('Anzahl der Datensätze ist ' + IntToStr(DatamoduleArtikel.DataModule1.IBDataSetArtikelpreiseGrid.RecordCount));

  DatamoduleArtikel.DataModule1.IBDataSetArtikelpreiseGrid.First;

  DatamoduleArtikel.DataModule1.IBDataSetArtikelpreise.Open;

  for i := 0 to DatamoduleArtikel.DataModule1.IBDataSetArtikelpreiseGrid.RecordCount -1 do
  begin
    DatamoduleArtikel.DataModule1.IBDataSetArtikelpreise.Append; //Tabelle mit neuen Preisen ergänzt
    DatamoduleArtikel.DataModule1.IBDataSetArtikelpreiseID_ARTIKEL.AsInteger := DatamoduleArtikel.DataModule1.IBDataSetArtikelpreiseGridID_ARTIKEL.AsInteger;
    DatamoduleArtikel.DataModule1.IBDataSetArtikelpreiseARTIKELNR.AsString := DatamoduleArtikel.DataModule1.IBDataSetArtikelpreiseGridARTIKELNR.AsString;
    DatamoduleArtikel.DataModule1.IBDataSetArtikelpreiseGRUNDPREIS.AsFloat := DatamoduleArtikel.DataModule1.IBDataSetArtikelpreiseGridGRUNDPREIS.AsFloat * Faktor;
    DatamoduleArtikel.DataModule1.IBDataSetArtikelpreiseDATUM.AsDateTime := StrToDate(JvDateDatePreisanpassung.Text);
    //ShowMessage('Neuer Preis ist ' + FloatToStr(DatamoduleArtikel.DataModule1.IBDataSetArtikelpreiseGRUNDPREIS.AsFloat));
    
    DatamoduleArtikel.DataModule1.IBDataSetArtikelpreise.Post;

    DatamoduleArtikel.DataModule1.IBDataSetArtikelpreiseGrid.Next;
  end;

  if DatamoduleArtikel.DataModule1.IBTransactionArtikel.InTransaction then DatamoduleArtikel.DataModule1.IBTransactionArtikel.Commit;
Routine funktioniert soweit. Ich frage mich nur, ob man es besser schreiben kann. Benutze jetzt 2 Datasets, aber es geht möglicherweise auch im einem Dataset und einem 'insert-Befehl'.

Gruß, Luckner
  Mit Zitat antworten Zitat