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