![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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
|
|||
|
|||
|
Себе в кружку
![]() |