Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.02.2017, 12:40   #1
Михаил_К
Пользователь
 
Регистрация: 17.02.2017
Сообщений: 10
По умолчанию подсчет суммы в stringgrid

добрый день, помогите разобраться что не так
есть stringgrid с 4 колонками (nn, usl, kol, cen), нужно произвести расчет по всем строкам
cen * kol и вывести результат в edit

Код:
var z: integer;
    i, b: byte;
begin
 assignfile (f, 'list.dat');
 reset(f);
 z:= 0;
 b:= filesize(f)-1;
 while not (eof(f)) do
 begin
  read(f, x);
  for i:= 0 to b do
  z:= x.cen * x.kol;
 end;
 edit3.Text:= inttostr(z);
 closefile(f);
end;
моя попытка считает только последнюю запись, не могу понять где косяк
Михаил_К вне форума Ответить с цитированием
Старый 17.02.2017, 13:32   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
z:=z +x.cen * x.kol;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 17.02.2017, 13:38   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Михаил_К Посмотреть сообщение
есть stringgrid с 4 колонками (nn, usl, kol, cen), нужно произвести расчет по всем строкам
а при чём здесь ФАЙЛ?!!
и где собственно StringGrid ?!!!

ну и чтение из файла неверно организовано (цикл в цикле - это ЖЕСТЬ!)
Код:
var 
  z: integer;
  x : <ВашТИП>;
begin
 assignfile (f, 'list.dat');
 reset(f);
 z:= 0;
 while not (eof(f)) do
 begin
   read(f, x);
   z:= z + x.cen * x.kol;
 end;
 edit3.Text:= inttostr(z);
 closefile(f);
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.02.2017, 13:53   #4
Михаил_К
Пользователь
 
Регистрация: 17.02.2017
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а при чём здесь ФАЙЛ?!!
и где собственно StringGrid ?!!!
в файле хранятся данные, а stinggrid служит для их отображения

спасибо за помощь !!
Михаил_К вне форума Ответить с цитированием
Старый 17.02.2017, 14:33   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Михаил_К Посмотреть сообщение
в файле хранятся данные, а stinggrid служит для их отображения
Вы же где-то читаете данные из файла в StringGrid ? Вам не кажется логичным, там же и подсчитать нужную сумму "итого" ? Или реально нужен ещё один дополнительный цикл по файлу ? А зачем?

и, если данные уже в StringGrid, почему бы их оттуда и не взять?

Ну и наконец, если данные в гриде могут редактироваться пользователем, то, логично было сразу пересчитывать "Итого" после изменений. Так?


Цитата:
Сообщение от Михаил_К Посмотреть сообщение
спасибо за помощь !!
это всегда пожалуйста!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.02.2017, 14:49   #6
Михаил_К
Пользователь
 
Регистрация: 17.02.2017
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Вы же где-то читаете данные из файла в StringGrid ? Вам не кажется логичным, там же и подсчитать нужную сумму "итого" ? Или реально нужен ещё один дополнительный цикл по файлу ? А зачем?

и, если данные уже в StringGrid, почему бы их оттуда и не взять?

Ну и наконец, если данные в гриде могут редактироваться пользователем, то, логично было сразу пересчитывать "Итого" после изменений. Так?
дополнительную процедуру сделал только для этапа разработки, в дальнейшем все будет объединено в одну процедуру

данные не могут редактироваться, грид служит только для визуализации а сам файл, временный, после все операций он очищается
а вот на счет подсчетов после изменения до этого не додумался, хорошая идея ))
Михаил_К вне форума Ответить с цитированием
Старый 17.02.2017, 16:26   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
данные не могут редактироваться
Цитата:
а вот на счет подсчетов после изменения до этого не додумался, хорошая идея
Хорошая, бесспорно, но только тогда, когда данные редактируются, но сам же написал, что они не могут редактироваться. Как быть ? ))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 20.02.2017, 13:05   #8
Михаил_К
Пользователь
 
Регистрация: 17.02.2017
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Хорошая, бесспорно, но только тогда, когда данные редактируются, но сам же написал, что они не могут редактироваться. Как быть ? ))
еще не придумал ))
Михаил_К вне форума Ответить с цитированием
Старый 20.02.2017, 13:10   #9
Михаил_К
Пользователь
 
Регистрация: 17.02.2017
Сообщений: 10
По умолчанию

можете досказать еще один момент, итогом всего является занесение всех данных в базу
это добавление всего остального:
Код:
begin
 with datamodule4.Table1 do
 begin
  append;
  edit;
  fieldbyname('Nom_nar').AsInteger:= strtoint(label2.Caption);
  fieldbyname('Dat_nar').AsDateTime:= strtodate(label3.Caption);
  fieldbyname('Paci').AsString:= edit1.text;
  fieldbyname('Adres').AsString:= edit2.text;
  fieldbyname('Date_birth').AsDateTime:= datetimepicker1.Date;
  fieldbyname('Vrach').AsString:= dblookupcombobox3.Text;
  fieldbyname('UET_varch').AsInteger:= dbtext3.Field.AsInteger;
  fieldbyname('Tehnik').AsString:= dblookupcombobox4.Text;
  fieldbyname('UET_teh').AsInteger:= dbtext4.Field.AsInteger;
  fieldbyname('ED').AsString:= dbtext5.Field.AsString;
 end;
end;
и ни как не могу сообразить как сюда впихнуть весь перечень из stringgrid
Михаил_К вне форума Ответить с цитированием
Старый 20.02.2017, 13:58   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

в качестве идеи:

Код:
for i:=SG1.FixedRow+1 to SG.CountRow-1 do 
begin
 with datamodule4.Table1 do
 begin
  append;
  fieldbyname('Nom_nar').AsInteger:= strtoint(SG1.Cells[1,i]);
  fieldbyname('Dat_nar').AsDateTime:= strtodate(SG1.Cells[2,i]);
  fieldbyname('Paci').AsString:= SG1.Cells[3,i];
  fieldbyname('Adres').AsString:= SG1.Cells[4,i];
....
  Post;
 end;
end;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчет суммы kent4 Microsoft Office Excel 12 19.12.2012 18:11
Подсчет суммы killer12rus SQL, базы данных 1 26.09.2010 00:35
Подсчет суммы Владимир1988 Помощь студентам 7 05.12.2009 23:02
Подсчет суммы в DBGrid girz БД в Delphi 3 16.05.2009 14:11
Подсчет суммы Kardi PHP 0 23.11.2008 16:46