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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.06.2015, 13:01   #1
Scorpuha
Форумчанин
 
Регистрация: 10.10.2013
Сообщений: 177
По умолчанию Суммировать данные

Есть БД ADO Access. В БД всего одна таблица, в ней несколько полей с названием Agregat№, также есть поля с расходом топлива за сутки поагрегатно к примеру RashodAgregat№. Задача, как вывести в отчет к примеру данные по всем агрегатам за текущий день и к примеру за период с начала месяца. правильно ли организована моя БД или надо названия агрегатов в отдельную таблицу?
Scorpuha вне форума Ответить с цитированием
Старый 25.06.2015, 13:17   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

изучайте агрегатные функции.
в вашем случае поможет запросы вида:
Код:
select sum([RashodAgregat№]), [Agregat№] 
  from ВашаОднаТаблица
where 
  Дата = нужной (или за месяц месяц(даты) = нужный and год(дата) = нужный )
group by [Agregat№]
Цитата:
правильно ли организована моя БД или надо названия агрегатов в отдельную таблицу?
во-первых, я категорически против использования кириллицы и всяких "хитрых" символов в именах полей. зачем Вам значок "№" в имени поля?! Любите риск? Или хотите багов и неожиданных косяков?!

во-вторых, я бы нормализовал. агрегаты в отдельную таблицу. в таблице расхода - ID из таблицы агрегатов. Причём учтите, первичный ключ должен быть искусственный (autoincrement, например).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.06.2015, 13:32   #3
Scorpuha
Форумчанин
 
Регистрация: 10.10.2013
Сообщений: 177
По умолчанию

я вот так фильтровал таблицу, походу не в ту степь пошел

Код:
procedure TForm1.Button2Click(Sender: TObject);

 begin
 Form1.DataSource1.DataSet.Filtered :=False;
 Form1.DataSource1.DataSet.Filter:='data>='+ DateToStr(DateTimePicker2.Date) + ' AND data<=' + DateToStr(DateTimePicker3.Date);
 Form1.DataSource1.DataSet.Filtered :=true;
 end;
В БД я не использую символы и кириллицу, это просто пример написал.
Scorpuha вне форума Ответить с цитированием
Старый 02.07.2015, 15:47   #4
Scorpuha
Форумчанин
 
Регистрация: 10.10.2013
Сообщений: 177
По умолчанию

вот тут накидал, но чето ничего не происходит

Код:
var
d1,d2:string;
 begin
      d1:=datetostr(datetimepicker2.Date);
       d2:=datetostr(datetimepicker3.Date);
      ADOQuery2.SQL.text:='select sum (gtg1) and sum(gtg1gaz) from narabotka where data between :d1 and :d2';
end;
Scorpuha вне форума Ответить с цитированием
Старый 02.07.2015, 15:52   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
var
d1,d2:string;
 begin
      d1:=datetostr(datetimepicker2.Date);
       d2:=datetostr(datetimepicker3.Date);
     with ADOQuery2 do begin 
      close;
      SQL.text:='select sum (gtg1) and sum(gtg1gaz) from narabotka where data between :d1 and :d2';
      Parameters.ParamByName('d1').Value:=d1;
      Parameters.ParamByName('d2').Value:=d2;
      Open.
     end;
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.07.2015, 15:59   #6
Scorpuha
Форумчанин
 
Регистрация: 10.10.2013
Сообщений: 177
По умолчанию

тоже ничего не происходит
Scorpuha вне форума Ответить с цитированием
Старый 02.07.2015, 16:01   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Scorpuha Посмотреть сообщение
вот тут накидал, но чето ничего не происходит

Код:
var
d1,d2:string;
 begin
      d1:=datetostr(datetimepicker2.Date);
       d2:=datetostr(datetimepicker3.Date);
      ADOQuery2.SQL.text:='select sum (gtg1) and sum(gtg1gaz) from narabotka where data between :d1 and :d2';
end;
жуть!
во-первых, вы же запрос не выполняете, что, по вашему должно происходить?

во-вторых, даты не стоит переводить в строковое представление, кроме глюков, это ничего не даст.

в-третьих, я уже не говорю о том, что даже после того, как Вы выполните запрос, его результат нужно из запроса куда-то задействовать.

это может выглядеть, например, так:
Код:
var
  d1,d2:TdateTime;
  sum1, sum2 : extended;
 begin
       sum1  := 0.0; sum2 := 0.0;
       d1 := trunc(datetimepicker2.Date);
       d2 := trunc(datetimepicker3.Date);
      ADOQuery2.Close;
      ADOQuery2.SQL.text:='select sum(gtg1) as sumgtg1, sum(gtg1gaz) as sumgtg1gaz  from narabotka where [data] between :paramdate1 and :paramdate1';
      ADOQuery2.Parameters.ParamByName('paramdate1').Value:=d1;
      ADOQuery2.Parameters.ParamByName('paramdate2').Value:=d2;
      ADOQuery2.Open;
      if  ADOQuery2.eof() then ShowMessage('Нет ни одной подходящей записи')
     else  begin
        sum1 := ADOQuery2.FieldsByName('sumgtg1').AsFloat;
        sum2 := ADOQuery2.FieldsByName('sumgtg1gaz').AsFloat;
        ShowMessage(' первая сумма = '+FloatToStr(sum1)+ ' вторая сумма = '+FloatToStr(sum2));
     end;
end;

p.s. писал прямо в браузере, могут быть опечатки/неточности...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.07.2015, 16:14   #8
Scorpuha
Форумчанин
 
Регистрация: 10.10.2013
Сообщений: 177
По умолчанию

каюсь, строку с Open упустил, добавил все равно не работает. в вашем коде в строке где if в скобках что нужно дописать?
Scorpuha вне форума Ответить с цитированием
Старый 02.07.2015, 16:21   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ничего не надо дописывать. если ругается компилятор, то просто уберите скобки после EOF:
Код:
 if  ADOQuery2.eof then ShowMessage('Нет ни одной подходящей записи')
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.07.2015, 16:24   #10
Scorpuha
Форумчанин
 
Регистрация: 10.10.2013
Сообщений: 177
По умолчанию

ага, убрал, компилятор ругался на paramdate1 и paramdate2 я его заменил d1 и d2. вроде заработало.
Scorpuha вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как суммировать данные из разных книг, в одну новую Exclussive Microsoft Office Excel 6 26.05.2015 20:33
суммировать данные horpenst Microsoft Office Excel 4 21.12.2011 17:01
суммировать checkBoxы crash_boy Общие вопросы Delphi 3 29.04.2011 13:55
Суммировать данные по группам tgm Microsoft Office Excel 0 12.02.2011 22:51
Как из нескольких файлов *.xls выбрать нужные данные суммировать их и скопировать в уже готовую форму Иван123456 Microsoft Office Excel 2 07.08.2009 21:50