Задать вопрос
gold_dezmor
@gold_dezmor
Digital director / Product manager

Почему алгоритм пропускает запись в Query?

Добрый день!

Имеется вот такой код проверки записей таблицы:

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 записей программа проставляет сумму скидки всем, в том числе пропущенной ранее записи.

Надеюсь поняли, что пытаюсь донести))
  • Вопрос задан
  • 256 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
tsklab
@tsklab
Здесь отвечаю на вопросы.
if (OrderView.ZQueryBasket.Active = True) and 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

if ( OrderView.ZQueryBasket.Active = True ) and ( OrderView.ZQueryBasket.RecordCount > 2 ) then
Ответ написан
@kalapanga
А посмотрите во время выполнения этой процедуры на RecordCount - он соответствует вашему количеству записей?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы