Показать сообщение отдельно
  #8  
Старый 30.08.2012, 14:05
Аватар для Lost_Fish
Lost_Fish Lost_Fish вне форума
Начинающий
 
Регистрация: 21.07.2011
Адрес: Новосибирск
Сообщения: 103
Версия Delphi: Delphi 7,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от SFproG
Спасибо. Но знать бы как правильно фильтр написать.
Попытался нечто подобное сделать:
Код:
procedure TForm1.ADOTable4CalcFields(DataSet: TDataSet);
var x,y:Integer;
begin
ADOTable2.Filtered:=True;
ADOTable2.Filter:='Сумма'=+Form1.DBGrid1.Fields[0].AsString;

ADOTable2.First;
y:=0;
While not ADOTable3.Eof do
begin
x:=ADOTable2['Сумма'];
y:=x+y;
ADOTable3.Next;
end;

ADOTable1schet.Value:=y;

end;
Ни чего не получилось.

Код:
ADOTable2.Filtered:=True;
ADOTable2.Filter:='Сумма='+Form1.DBGrid1.Fields[0].AsString;

Местами поменяй, фильтр включать после того как в него значение поставишь.
И этой строчкой ты пытаешься отфильтровать значения по сумме, а надо по поставщику.

и я бы сделал так
Код:
ADOTable2.Filter:='key1='+VarToStr(ADOTable1['ID']);
//или можно
ADOTable2.Filter:='key1='+ADOTable1.FieldByName('ID').AsString;
//кому как нравится

и да, почему у тебя цикл идёт по Table3 а суммируешь одну и туже запись из Table2?

Давай разберёмся

Код:
procedure КалькФиелдс;
var
    наша переменная
begin
    //ставим значение фильтра для таблицы счета, такое чтоб таблица счета показывала только те записи которые относятся к текущему поставщику из таблицы поставщиков (см. ваыше)
    //включаем фильтр
    //ставим начальное значение нашей переменной
    //Цикл пока не дойдем до конца таблицы счетов (ведь сумма значений именно из неё нас интересует) //после включения фильтра курсор автоматом ставится на первую запись
        //в цикле сумируем текущее значении из таблицы счетов с нашей переменной
        //переходим к следующей записи в таблице счетов
    //конец цикла
    //ну и на выходе у нас нужная сумма
end;
Ответить с цитированием