Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Подсчёт суммы по полю, без SQL


Автор: ZMihail 26.12.2012, 13:51
Есть две таблицы (ClientDataSet). Первая, назовём её (FIOT) с первичным ключом (ID) и тектовым 
полем (Fio)- где записываются фамилии. Вторая, назавём её (SUMT) c ключевым полем (FIOID), куда записываются
числовые данные из поля (ID) таблицы (FIO), второе числовое поле (SUM), где находятся суммы по кождой фамилии
из первой таблицы. Каждая фамилия имеет много строк из таблицы (SUMT). Нужно посчитать суммы по каждой 
фамилии и вывести этот результат в ListBox. Запросы в этих таблицах не работают. 

procedure TForm1.Button7Click(Sender: TObject);
Var summ: integer;
i : integer;
begin
SumT.Filter:= 'FIOID='+ fiot.FieldByName('ID').AsString;
SumT.Filtered:=true;
summ:=0;

while not SUMT.Eof do
begin
SUMT.Next;
while not fiot.Eof do
Begin
summ:=summ+ SUMT.FieldByName('sob').asinteger;
ListBox1.Items.Add(fiot.FieldByName('Fio').AsStrin g+ ': '+ IntToStr(summ));
fiot.Next;
end;
end;
end;

Автор: Vas 26.12.2012, 15:47
Как-то так, писал без дельфей и проверки, ошибки могут быть, но главное принцип 
Код

procedure SumList(AlistBox: TListBox);
  var summa, id: integer;
begin
AlistBox.Clear;
FIOT.First; //мало ли где указатель 
while not FIOT.Eof do
begin
    id:=FIOT.FieldByName('ID').AsInteger;
    summa:=0;
    SUMT.First; //аналогично 
    while not SUMT.Eof do
    begin
       if FIOT.FieldByName('FIOID').AsInteger=ID then
         summa:=summa+FIOT.FieldByName('SUM').AsInteger;
         SUMT.Next; //на следующую запись
    end;
    AlistBox.Items.Add(FIOT.FieldByName('FIO').AsStirng+' '+IntToStrDef(summa,0));  //добавляем в листбокс
    FIOT.Next; //на следующую
end;
end;


end;

Автор: ZMihail 26.12.2012, 16:01
Спасибо! Сейчас попробую.

Автор: ZMihail 26.12.2012, 16:16
Ругается listBox1.Items.Add(FIOT.FieldByName('FIO').AsString + ':'
    + IntToStrdef (здесь) (summa,0));
                           

Автор: Vas 26.12.2012, 17:23
Ну замени на просто IntToStr. И весь текст ошибки приводи, а то не понятно на что ругается конкретно

Автор: Akella 28.12.2012, 10:30
http://forum.vingrad.ru/forum/topic-353769.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)