Hallo Conny,
Zitat von
marabu:
Die eigentlichen drei Zeilen zum Aktualisieren sind in Ordnung.
Du musst woanders suchen. Gibt es eine Fehlermeldung? Wenn ja, dann teile sie bitte mit. Wenn nein, wie stellst du exakt fest, dass die Änderung gemacht bzw. nicht gemacht wurde?
Nur ein Versuch deine Neugier doch noch zu wecken - wenn du bei Table1 einen Index auf ARTIKELNUM einstellst, dann geht das hier anstelle der ewigen Schleife:
Delphi-Quellcode:
...
with DataModule1.Table1 do
if FindKey([rechnungszeile.artikel.Artikelnummer]) then
begin
Edit;
FieldValues['LAGERBEST'] := rechnungszeile.anzahl;
Post;
end;
...
Und mit der
Query-Komponente könntest du noch einfacher zum Ergebnis kommen:
Delphi-Quellcode:
...
with LagerQuery
do
begin
SQL.Text := '
UPDATE lager SET best = best - :anzahl WHERE artnr = :artnr';
Params.ParamByName('
artnr').Value := rechnungszeile.artikel.Artikelnummer;
Params.ParamByName('
anzahl').Value := rechnungszeile.anzahl;
ExecSql;
end;
...
Wobei der
SQL-Text sogar nur einmal gesetzt werden müsste, da er sich ja nicht ändert. Und noch einfacher würde es, wenn die Bewegungsdaten selbst auch in einer Datanbank-Tabelle gespeichert wären...
Sonntagsgrüße vom marabu