Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: SQL  (Прочитано 8647 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Len
Гость
SQL
« : 12-09-2007 08:10 » 

Помогите, пожалуйста, построить SQL.
У меня есть таблица РН (Дата, Номер, Сумма). Нужно выбрать строки в заданном периоде, например, за месяц, год, квартал или другой произвольный период. На форме ставлю два Edit-a (для проставления нач. и кон. даты), кнопка (для выполнения запроса) и Grid (для результата запроса).
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 12-09-2007 08:59 » new



select * from PH where Дата between '01.01.2007'  and  '01.12.2007'

или

select * from PH where Дата => '01.01.2007'  Дата <=  '01.12.2007'

соответственно нужно использовать функции преобразования дат для конкретной СУБД
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Len
Гость
« Ответ #2 : 12-09-2007 11:50 » 

Это я умею, я хочу ставить значения дат в Edit-ы и получать результат запроса по произвольным периодам
Записан
kroum
Интересующийся

ua
Offline Offline

« Ответ #3 : 12-09-2007 13:14 » 

В запросе вместо конкретных дат поставить
where date_column between :beg_date and :fin_date

В инспекторе объектов появится список в свойстве "Params". Установить для них тип "Date" (или DateTime)

Перед открытием запроса с помощью Query1.ParamByName('beg_date').AsDate=[значение из TEdit'ов] установить требуемый диапазон дат

Изменение значения параметров применяется только после "переоткрытия" запроса
Записан
Len
Гость
« Ответ #4 : 13-09-2007 08:22 » 

Разрешите уточнить таблица RN(DataRN,NumRN,SumRN), соответственно, правильно ли я написал запрос:
select * from RN where DataRN between :beg_date and :fin_date

Далее в модуле написал:
Query1.ParamByName('beg_date').AsDate:=DateTimePicker1.Date; (вместо Edit-ов думаю лучше
Query1.ParamByName('fin_date').AsDate:=DateTimePicker2.Date;   использовать DateTimePicker)
Query1.Open;
Если что-то не правильно, поправьте, пожалуйста, запрос почему-то не выполнился.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 13-09-2007 08:50 » 

он мог не выполниться по причине не соответствия формата дат в СУБД и в запросе
т.е. даты нужно привести к одинаковому виду
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Len
Гость
« Ответ #6 : 13-09-2007 10:14 » 

Формат дат был в соответствии dd.mm.gggg. Ошибка была не в этом. В модуле добавил всего две строки, но так и не понял, почему они так уж принципиально здесь понадобились:
Query1.Close;
Query1.Prepare;
Первая всего лишь деактивирует запрос, вторая, для убеждения, что запрос подготовлен...
Странно до этого все запросы работали и без этих строк.
Всем, огромное спасибо за участие!

 
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines