Цитата:
Сообщение от 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;