Добрый день!
Имеется вот такой код проверки записей таблицы:
procedure TProdAdd.sBitBtn1Click(Sender: TObject);
begin
if OrderView.ZQueryBasket.Active = True then
OrderView.ZQueryBasket.Edit
else ShowMessage('Сообщение1');
if (Quantity.Text = '') or (Name.Text = '') then ShowMessage('Сообщение 2!')
else
begin
OrderView.ZQueryBasket.Post; // Проверка, если записей 3, то пересчитываем всем колонку "Сумма скидки"
OrderView.ZQueryBasket.Last;
if OrderView.ZQueryBasket.RecordCount > 2 then
begin
OrderView.ZQueryBasket.First;
while not OrderView.ZQueryBasket.Eof do
begin
OrderView.ZQueryBasket.Edit;
OrderView.ZQueryBasket.FieldByName('discount_price').Value := OrderView.ZQueryBasket.FieldByName('base_price').Value * 0.1;
OrderView.ZQueryBasket.Post;
OrderView.ZQueryBasket.Next;
end;
end;
end;
end;
Представьте, что изначально в наборе данных 1 запись или 2, и мы добавляем еще одну запись, потом еще одну.
В итоге при достижении записей > 2 происходит прогон по всему набору данных и каждой из записей перезаписывается поле "Сумма скидки".
Но у одной из записей не происходит перерасчет, программа ее пропускает.
Но, если продолжить заполнять таблицу записями, то по достижению 5 записей программа проставляет сумму скидки всем, в том числе пропущенной ранее записи.
Надеюсь поняли, что пытаюсь донести))