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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.05.2013, 02:04
Ksandra Ksandra вне форума
Прохожий
 
Регистрация: 04.05.2013
Сообщения: 4
Версия Delphi: Delphi 7
Репутация: 10
Печаль Возникла проблема с запросами

Здравствуйте,уважаемые,программисты. У меня возникли проблемы с базой данной, уже голову сломала((( есть Delphi 7 и база в Access связанные между собой. есть все формы и запросы. но с одним вопросом из курсовой у меня возникли проблемы. есть на форме таблица (связанная конечно с Access) cостоит из полей "код" "цена блета" "Маршрут" "Кол - во проданных билетов" "Время отправки" "ФИО водителя". Мне необходимо отфилтровать данные так что бы выводилась выручка, за день, неделю, месяц, квартал и год. Я перечитала и Флёнова и по форумам поползала, но ничего не нашла , может быть вы поможите, хотя на нужный материал в интернете или книгу. Заранее, спасибо, за помощь
Ответить с цитированием
  #2  
Старый 04.05.2013, 04:44
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 339
Версия Delphi: 10.4
Репутация: 429
Сообщение

А как фильтровать данные если нет поля "Дата продажи билета"?
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Ответить с цитированием
  #3  
Старый 04.05.2013, 05:49
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,029
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от Kailon
А как фильтровать данные если нет поля "Дата продажи билета"?

Подозреваю, что можно воспользоваться полем "Время отправки", если оно включает дату. Теперь по фильтрации. Не помню какие функции есть в аксесе, воспользуемся функцией SubStr, для вычленения нужного кода для генерации. Тогда будет выглядеть примерно так:
Код:
-- для дня
select subst("Время отправки", 1, 10), sum("цена блета" *  "Кол - во проданных билетов") from "Таблица" group by subst("Время отправки", 1, 10);

-- для месяца
select subst("Время отправки", 1, 7), sum("цена блета" *  "Кол - во проданных билетов") from "Таблица" group by subst("Время отправки", 1, 7);

-- для года
select subst("Время отправки", 1, 4), sum("цена блета" *  "Кол - во проданных билетов") from "Таблица" group by subst("Время отправки", 1, 4);

PS. Предполагается, что при конвертации даты в строку мы получаем что-то типа формата YYYY-MM-DD HH:MI:SS.SSS. Если формат другой, то соответсвенно надо поправить параметры функции.
Ответить с цитированием
  #4  
Старый 04.05.2013, 13:42
Ksandra Ksandra вне форума
Прохожий
 
Регистрация: 04.05.2013
Сообщения: 4
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Kailon
А как фильтровать данные если нет поля "Дата продажи билета"?
я тоже столкнулась с данной проблемой сразу и подошла к преподу, но он сказал, что поля добавлять не нужно сделай, по тем, которые даны.
Ответить с цитированием
  #5  
Старый 04.05.2013, 14:16
Ksandra Ksandra вне форума
Прохожий
 
Регистрация: 04.05.2013
Сообщения: 4
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Огромное спасибо, что помогаете, но можете более подробно описать. Я просто ту тему проболела, а в конспектах мало что нашла(((
Ответить с цитированием
  #6  
Старый 04.05.2013, 21:03
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,029
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от Ksandra
Огромное спасибо, что помогаете, но можете более подробно описать. Я просто ту тему проболела, а в конспектах мало что нашла(((

А что тут объяснять? Использованна агрегрегатная функция SUM и группировка через GROUP BY. Значение для группировки вычисляется динамически с помощью функции SubStr. В зависимости от диалекта SQL (читай СУБД), можно применять разные методы для вычисления значения группировки. Если тебе нужна сумма за конкретный период, а не полный отчет, то можно обойтись без группировки, а просто ограничить выборку через WHERE:
Код:
-- для дня
select sum("цена блета" *  "Кол - во проданных билетов") from "Таблица" where "Время отправки" >= '2013-05-01' and "Время отправки" < '2013-05-02'; 

-- для месяца
select sum("цена блета" *  "Кол - во проданных билетов") from "Таблица" where "Время отправки" >= '2013-05-01' and "Время отправки" < '2013-06-01';

-- для года
select sum("цена блета" *  "Кол - во проданных билетов") from "Таблица" where "Время отправки" >= '2013-01-01' and "Время отправки" < '2014-01-01';

ЗЫ. Представление даты в конкретной СУБД может отличаться.

Вообще, читай о GROUP BY и аггрегатных функциях. А вообще, задавай конкретные вопросы, честно говоря, просто лениво тут набирать целые статьи, тем более, что все это есть, стоит только поискать.
Ответить с цитированием
  #7  
Старый 05.05.2013, 16:47
Ksandra Ksandra вне форума
Прохожий
 
Регистрация: 04.05.2013
Сообщения: 4
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Огромное спасибо, всё помогло
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter