Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.03.2013, 15:15
Chinvad Chinvad вне форума
Прохожий
 
Регистрация: 23.11.2011
Сообщения: 23
Репутация: 10
По умолчанию Функция SUM в SQL

Здравствуйте! Очень нужна помощь.
Нужно подсчитать сумму доходов за определенный период времени. Пытаюсь сделать ниже приведенным образом, но выдает ноль ) видимо, не без всяких оснований.
Код:
try
DM.ADOQuery1.SQL.Clear;
DM.ADOQuery1.SQL.Add('SELECT SUM(summa) AS D FROM Dohod WHERE data BETWEEN :first_date AND :last_date');
DM.ADOQuery1.Parameters.ParamByName('first_date').Value := DateTimePicker1.Date;
DM.ADOQuery1.Parameters.ParamByName('last_date').Value := DateTimePicker2.Date;
DM.ADOQuery1.Active:=True;
except
on e:Exception do
end;
MAD: Оформляем код тегом code а не php.

Последний раз редактировалось Chinvad, 11.03.2013 в 14:07.
Ответить с цитированием
  #2  
Старый 09.03.2013, 15:27
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

а без sum выборка какие-то данные возвращает?
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение:
Chinvad (09.03.2013)
  #3  
Старый 09.03.2013, 21:42
Chinvad Chinvad вне форума
Прохожий
 
Регистрация: 23.11.2011
Сообщения: 23
Репутация: 10
По умолчанию

Спасибо, что навели на верную мысль ) Обещаю впредь использовать тег code.
Ответить с цитированием
  #4  
Старый 09.03.2013, 21:56
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Дак че там с выборкой то?
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #5  
Старый 10.03.2013, 22:03
Chinvad Chinvad вне форума
Прохожий
 
Регистрация: 23.11.2011
Сообщения: 23
Репутация: 10
По умолчанию

Исправила проблему с DateTime в DateTimePicker и просто Date у меня в базе, но нет ) вопрос остается актуальным! Запрос работает в виде суммы без выборки:
Код:
try
DM.ADOQuery1.SQL.Clear;
DM.ADOQuery1.SQL.Add('SELECT SUM(summa) AS D FROM Dohod');
DM.ADOQuery1.Active:=True;
except
on e:Exception do
end;

Dohod:=DM.ADOQuery1.FieldByName('D').AsFloat;

и так же работает в виде простой выборки из таблицы по датам:
Код:
try
DM.ADOQuery1.SQL.Clear;
DM.ADOQuery1.SQL.Add('SELECT * FROM Dohod WHERE data BETWEEN :first_date AND :last_date');
DM.ADOQuery1.Parameters.ParamByName('first_date').Value := StrToDateTime(DateToStr(DateTimePicker1.Date));
DM.ADOQuery1.Parameters.ParamByName('last_date').Value := StrToDateTime(DateToStr(DateTimePicker2.Date));
DM.ADOQuery1.Active:=True;
except
on e:Exception do
end;

Но! не работает в первоначальном виде. Ошибка? Как вообще с помощью запроса посчитать сумму за период времени?
Ответить с цитированием
  #6  
Старый 10.03.2013, 23:21
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Сделай из таблицы "Прибул" выборку, сдается мне там данных просто нет.
Условия вообще выкинь.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #7  
Старый 11.03.2013, 12:59
Chinvad Chinvad вне форума
Прохожий
 
Регистрация: 23.11.2011
Сообщения: 23
Репутация: 10
По умолчанию

Данные есть. Сумму по всей таблице считает верно. Так же верно выводит поиск по датам. А сумму по датам не считает. Может, это вообще невозможно? Я в литературе пока не встречала запроса c функцией SUM с выборкой именно по датам.
Ответить с цитированием
  #8  
Старый 11.03.2013, 13:20
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Ты хочешь просуммировать даты? Правильно понимаю?
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #9  
Старый 11.03.2013, 14:06
Chinvad Chinvad вне форума
Прохожий
 
Регистрация: 23.11.2011
Сообщения: 23
Репутация: 10
По умолчанию

Мне нужно подсчитать доходы предприятия за определенный период времени. Есть таблица Dohod, в которой есть такие поля, как data и summa. Нужно, скажем, посчитать сумму доходов за период с 25.01.2013 по 26.02.2013.
Ответить с цитированием
  #10  
Старый 11.03.2013, 14:57
Аватар для movnet
movnet movnet вне форума
Начинающий
 
Регистрация: 24.07.2008
Сообщения: 127
Версия Delphi: Delphi 7
Репутация: 23
По умолчанию

какой тип поля data?
Ответить с цитированием
  #11  
Старый 11.03.2013, 15:48
Chinvad Chinvad вне форума
Прохожий
 
Регистрация: 23.11.2011
Сообщения: 23
Репутация: 10
По умолчанию

дата время. Но я записываю только дату в кратком формате (дд.мм.гггг). В запросе тоже проделываю с DateTimePicker такую штуку, чтобы получить только дату:
Код:
StrToDateTime(DateToStr(DateTimePicker1.Date))
Смотрю текст запроса, да, действительно, получается только дата, как в поле data БД.
Ответить с цитированием
  #12  
Старый 11.03.2013, 15:52
Аватар для movnet
movnet movnet вне форума
Начинающий
 
Регистрация: 24.07.2008
Сообщения: 127
Версия Delphi: Delphi 7
Репутация: 23
По умолчанию

тогда так :

Код:
DM.ADOQuery1.Parameters.ParamByName('first_date').Value := StrToDateTime(DateToStr(DateTimePicker1.Date)+' 00:00:00');
DM.ADOQuery1.Parameters.ParamByName('last_date').Value := StrToDateTime(DateToStr(DateTimePicker2.Date)+' 23:59:59');

Последний раз редактировалось movnet, 11.03.2013 в 15:58.
Ответить с цитированием
  #13  
Старый 11.03.2013, 16:56
Chinvad Chinvad вне форума
Прохожий
 
Регистрация: 23.11.2011
Сообщения: 23
Репутация: 10
По умолчанию

Все равно выдает ноль (
Я пробовала, тот же запрос, но без суммы правильно выводит все даты в заданном временном промежутке. Так же запрос работает корректно, если убрать условие с датами, тем самым требуя сумму по всем строкам таблицы.
Ответить с цитированием
  #14  
Старый 11.03.2013, 17:21
Аватар для movnet
movnet movnet вне форума
Начинающий
 
Регистрация: 24.07.2008
Сообщения: 127
Версия Delphi: Delphi 7
Репутация: 23
По умолчанию

база данных какая?
Ответить с цитированием
  #15  
Старый 11.03.2013, 17:48
Chinvad Chinvad вне форума
Прохожий
 
Регистрация: 23.11.2011
Сообщения: 23
Репутация: 10
По умолчанию

MS Access 2007
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:19.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025