Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/12: Рейтинг темы: голосов - 12, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 15.06.2019
Сообщений: 6
Delphi 6-7

Подсчет проданных мест за определенную выборку дат (SQL запрос)

15.06.2019, 16:12. Показов 2419. Ответов 11

Студворк — интернет-сервис помощи студентам
Доброе утро, день и вечер, многоуважаемые форумчане.
Делаю курсовой и встал очень серьезный вопрос, который никто не может решить, нужна ваша помощь.
Есть задание: Определить количество проданных мест за месяц (выборку дат). Есть Edit1 и Edit2 и в первый я ввожу начало сортировки даты, а во второй, соответственно, конец. Например начало 06/12/2019 и конец 06/15/2019 (мой делфи принимает дату в mm/dd/yyyy, но не суть). И мне нужно чтобы в промежуток этих дат высчитало сколько было продано мест или если нельзя сделать через промежуток или это тяжело, то уже хотя бы за целый месяц, тоже будет очень и очень гуд.
Попереспрашивал уже всех, обыскал все что мог, не могу додуматься как это сделать. Выручайте.
Вот моя таблица. (Таблица Access подключенная через DBGrid с помощью ADOQuery).
Кликните здесь для просмотра всего текста
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.06.2019, 16:12
Ответы с готовыми решениями:

Запрос на выборку в диапазоне дат
Доброй ночи! Подскажите как решить задачу. Имеется БД SQLite, с неё необходимо делать выборку записей в DBGrid запросом в нужном диапазоне...

Подскажите, запрос на выборку в интервале дат
Добрый вечер подскажите пожалуйста,как в Access написать в запросе ,например, с 15.01.81 по 15.06.81,с 15.01.82 по 15.03.82

Запрос на выборку записей из БД по диапазону дат
Выполняю следующий запрос: DM.ADOQuery1.Close; DM.ADOQuery1.Active := false; DM.ADOQuery1.SQL.Clear; ...

11
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
15.06.2019, 16:51
Лучший ответ Сообщение было отмечено OLEHb как решение

Решение

Не зная точно наименования вашей таблицы и полей в ней получается примерно так:
Delphi
1
2
3
4
AdoQuery1.SQL.Text := 'select summ([Кол-во проданных мест]) from Вылеты where Вылет between :BDate and :EDate';
AdoQuery1.Parameters.ParamValue['BDate'] := StrToDate(Edit1.Text);
AdoQuery1.Parameters.ParamValue['EDate'] := StrToDate(Edit2.Text);
AdoQuery1.Open;
1
0 / 0 / 0
Регистрация: 15.06.2019
Сообщений: 6
15.06.2019, 17:05  [ТС]
А что такое BDate и EDate?
Наименование таблицы - tabl
И можно ли сделать как то вывод в Label или Edit?
0
0 / 0 / 0
Регистрация: 15.06.2019
Сообщений: 6
15.06.2019, 20:13  [ТС]
Цитата Сообщение от Пытливый Посмотреть сообщение
Не зная точно наименования вашей таблицы и полей в ней получается примерно так:
Delphi
1
2
3
4
AdoQuery1.SQL.Text := 'select summ([Кол-во проданных мест]) from Вылеты where Вылет between :BDate and :EDate';
AdoQuery1.Parameters.ParamValue['BDate'] := StrToDate(Edit1.Text);
AdoQuery1.Parameters.ParamValue['EDate'] := StrToDate(Edit2.Text);
AdoQuery1.Open;
Ругается так
0
0 / 0 / 0
Регистрация: 15.06.2019
Сообщений: 6
15.06.2019, 20:45  [ТС]
Вообщем я разобрался в коде, подправил его
Delphi
1
2
3
4
5
AdoQuery2.SQL.Text := 'SELECT sum ([Кол-во проданных мест]) from tabl where Вылет between :BDate and :EDate';
AdoQuery2.Parameters.ParamValues['BDate'] := StrToDate(Edit1.Text);
AdoQuery2.Parameters.ParamValues['EDate'] := StrToDate(Edit4.Text);
AdoQuery2.Open;
Label4.Caption:=ADOQuery2.Fields[0].asString;
Но теперь проблема такая, что не происходит ровным счетом ничего. Ни ошибки, ни изменений в таблице (DBGrid), ни вывода числа в Label. Ничего.
0
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
15.06.2019, 21:48
Если DBGrid не завязан на AdoQuery2, то там ничего и не будет изменятся. Ну а что-бы красиво проверить, работает или нет запрос, сделать можно так:
Delphi
1
2
3
4
5
6
7
AdoQuery2.SQL.Text := 'SELECT sum([Кол-во проданных мест]) as Sum1 from tabl where Вылет between :BDate and :EDate';
AdoQuery2.Parameters.ParamValues['BDate'] := StrToDate(Edit1.Text);
AdoQuery2.Parameters.ParamValues['EDate'] := StrToDate(Edit4.Text);
AdoQuery2.Open;
if AdoQuery2.IsEmpty 
then Label4.Caption:='Ничего не продано'
else Label4.Caption:=ADOQuery2['Sum1'];
Ну и наконец остается узкое место - даты в Акцесе. Если формат даты в Акцесе и в параметрах не совпадают, то результат не вернется. Кроме того, надо иметь ввиду еще один нюанс с датам в Акцесе. Дата в Акцесе всегда содержит время, поэтому если вы передаете дату как 01.01.2019, то Акцесс ее воспримет как 01.01.2019 00:00:01 и следовательно период за сутки должен быть передан либо с учетом времени 01.01.2019 00:00:01 - 01.01.2019 23:59:59, либо 01.01.2019-02.01.2019
1
0 / 0 / 0
Регистрация: 15.06.2019
Сообщений: 6
15.06.2019, 22:44  [ТС]
Цитата Сообщение от Пытливый Посмотреть сообщение
Если DBGrid не завязан на AdoQuery2, то там ничего и не будет изменятся. Ну а что-бы красиво проверить, работает или нет запрос, сделать можно так:
Delphi
1
2
3
4
5
6
7
AdoQuery2.SQL.Text := 'SELECT sum([Кол-во проданных мест]) as Sum1 from tabl where Вылет between :BDate and :EDate';
AdoQuery2.Parameters.ParamValues['BDate'] := StrToDate(Edit1.Text);
AdoQuery2.Parameters.ParamValues['EDate'] := StrToDate(Edit4.Text);
AdoQuery2.Open;
if AdoQuery2.IsEmpty 
then Label4.Caption:='Ничего не продано'
else Label4.Caption:=ADOQuery2['Sum1'];
Ну и наконец остается узкое место - даты в Акцесе. Если формат даты в Акцесе и в параметрах не совпадают, то результат не вернется. Кроме того, надо иметь ввиду еще один нюанс с датам в Акцесе. Дата в Акцесе всегда содержит время, поэтому если вы передаете дату как 01.01.2019, то Акцесс ее воспримет как 01.01.2019 00:00:01 и следовательно период за сутки должен быть передан либо с учетом времени 01.01.2019 00:00:01 - 01.01.2019 23:59:59, либо 01.01.2019-02.01.2019
Я дико извиняюсь, я только сейчас заметил, что у меня лейбл 14, а не 4, тот первый код заработал))
Но попробовал второй, он тоже заработал, но специально вбил даты которых нет, чтобы получить Caption "Ничего не продано" но выдает ошибку
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
16.06.2019, 00:18
Лучше набор данных проверять на пустоту так:
Delphi
1
2
3
4
  if AdoQuery2.EOF then 
    Label14.Caption:='Ничего не продано'
  else 
    Label14.Caption:=ADOQuery2['Sum1'];
0
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
16.06.2019, 03:44
Анекдот мне тут вспомнился.

Не по теме:

Грузины луче чем Армяне!
Чем?
Чем Армяне.

0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
16.06.2019, 07:22
Цитата Сообщение от Пытливый Посмотреть сообщение
Анекдот мне тут вспомнился.
Действительно, что в лоб, что по лбу. Функция sum всегда принесет строку. Другое дело, какую.
Отсюда, "исправленному верить":
Delphi
1
2
3
  if ADOQuery2['Sum1'] = NULL
  then lbl1.Caption:='Ничего не продано'
  else lbl1.Caption:=ADOQuery2['Sum1'];
0
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
16.06.2019, 10:14
А ведь действительно, агрегаты что-то обязаны вернуть. Тормознул.
0
0 / 0 / 0
Регистрация: 15.06.2019
Сообщений: 6
17.06.2019, 02:27  [ТС]
Огромнейшее спасибо Вам!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.06.2019, 02:27
Помогаю со студенческими работами здесь

Запрос на выборку между двух дат к БД Access
Никак не пойму в чем секрет. Есть БД в Access. В таблице одно из полей имеет тип данных: "Дата и время". В этом поле хранятся...

Запрос на выборку диапазона дат (данные DateTime) из БД
Доброе время суток всем! Подскажите, пожалуйста, синтаксис строки запроса на выборку диапазона дат из БД Access через Between. Все мои...

Запрос на выборку из диапозона дат по номеру сотрудника
Народ такая проблема нужен Запрос на выборку из диапозона дат по номеру сотрудника Я осуществляю его таким образом SELECT IdСотрудника...

Запрос на выборку по дате и подсчет найденных записей
Здравствуйте. Прошу помочь с запросом. Не получается сделать счетчик по найденным записям. Надо что бы при заполнении полей "От"...

Sql запрос на выдачу свободных мест в зале
Здравствуйте как сделать запрос который будет выводить все номера мест которые не заняты. Исходные данные: Таблица zaly: id |...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru