|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Сумма по диапазону дат?
Доброго здоровья почтенные.
Чтото совсем между ушей замкнуло. Делаю по таблице фильтр по диапазону дат (ADOQuery) Код:
procedure TForm7.Button1Click(Sender: TObject); begin SortDate.SQL.Clear; SortDate.SQL.Add('SELECT *FROM СкладАрх'); SortDate.SQL.Add('WHERE (Дата >=:FromDate) AND (Дата <=:ToDate)'); SortDate.Parameters.ParamByName('FromDate').Value:= FormatDateTime('dd.mm.yy', DateTimePicker1.Date); SortDate.Parameters.ParamByName('ToDate').Value:= FormatDateTime('dd.mm.yy', DateTimePicker2.Date); SortDate.Close; SortDate.Open; SortDate.Sort:='Дата DESC'; Теперь нужно в результате фильтра суммировать каждый столбец. Код:
SELECT Sum(СкладАрх.М) AS М, Sum(СкладАрх.МС) AS МС........... Собственно вопрос : КУДА (именно куда а не как) запихнуть этот самый SELECT чтоб посчитало Точнее чтото не пойму как сделать чтобы ADOQuery2 с запросом суммирования цеплялся к результатам выборки потом уже считал Последний раз редактировалось svmt, 10.06.2019 в 13:56. |
#2
|
||||
|
||||
По идее можно было бы написать
Код:
SELECT Sum(СкладАрх.М) AS М, Sum(СкладАрх.МС) AS МС WHERE Можно использовать компоненты визуализации, которые могут сами безо всяких запросов считать агрегатные функции, например, EhLib. Да, и закрывать датасет (SortDate.Close) нет смысла, он автоматически закрывается сам при изменении свойства SQL. И сортировку можно сразу в текст запроса засунуть (ORDER BY...). Последний раз редактировалось Guaho, 10.06.2019 в 18:33. |
#3
|
|||
|
|||
Guaho, только не WHERE, а FROM. Запрос должен принять вид:
Код:
select sum(A) as Sum_a, sum(B) as Sum_b from ( select a, b from my_table where c between :date1 and :date2 ) |
#4
|
|||
|
|||
Да хотелось бы разбить эти два запроса.
DBDrideh поковырял немного но так и не понял как результат суммы (допустим) DBGridEh1.Columns[номер колонки] запихнуть в тот же самый Edit... Или DBEdit...... |
#5
|
||||
|
||||
Эк вы все намешали. У вас используется неродной компонент DBGridEh, который в отличии от стандартного DBGrid, умеет выводить итоги. К запросу это умение не имеет отношения. Вы подаете в DBGridEh какой-то набор данных и настраиваете DBGridEh на выдачу итогов по этому набору через свойство Footer
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
svmt (11.06.2019)
|
#6
|
||||
|
||||
Да, виноват, "FROM" я пропустил, а он, конечно же, должен быть. DBGridEh отображает сумму в футере грида, а если Вам надо обязательно выводить в Edit, тогда можно попробовать
Код:
Edit1.Text := grid1.Columns[номер столбца].Footer.Value Последний раз редактировалось Guaho, 11.06.2019 в 19:03. |
Этот пользователь сказал Спасибо Guaho за это полезное сообщение: | ||
svmt (11.06.2019)
|
#7
|
|||
|
|||
Цитата:
а представьте вариант что к результату сортировки цепляются еще несколько "продолжений". ну как вариант в каждом запросе описывать все с нуля. хотя походу Описывать все это всетаки правильно Код:
Edit1.Text := grid1.Columns[номер столбца].Footer.Value покажите реальный РАБОЧИЙ пример. готов на карту пиво слить. заткнулся на преобразовании.....шибка говорит чтото типа стринг и ехэчегототам.... что за тип этот ехэ загадка. перерыл весь инет на предмет примера (ибо увы отмазка одна- поможыте я тут новенький) и примеров нолЪ. есть косвенные примеры на основе которых хочу чтото отписать но безрезультатно. И опыт - сын ошибок трудных и Гена - Чебурашкин друг Последний раз редактировалось svmt, 11.06.2019 в 20:42. |
#8
|
|||
|
|||
Ну, варианты.
1. Сделать view и из нее выполнять оба запроса. Первый - для получения данных для грида, второй - для получения сумм. 2. Тут не запросом суммы получаются, а перебором данных. Отключаем обновление, пробегаемся по датасету, суммируем все, выводим в нужные поля и включаем отображение обратно. Как-то так (пишу здесь, так что мелкие очепятки возможны): Код:
var S1, S2 : Integer; // не знаю тип полей для суммированния, пуст будет кол-во begin S1 := 0; S2 := 0; SortDateDataSource.DisableContols; Try SortDate.First; While Not SortDate.Eof Do Begin S1 := S1 + SortDate.FieldByName('M').AsInteger; S2 := S2 + SortDate.FieldByName('MC').AsInteger; SortDate.Next; End; Edit1.Text := IntToStr(S1); Edit2.Text := IntToStr(S2); Finally SortDate.First; SortDateDataSource.EnableContols; End; |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
svmt (12.06.2019)
|
#9
|
|||
|
|||
Вот рабочий. Спасибо. Куда пивас лить?
|
#10
|
|||
|
|||
Себе в кружку
|