Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Неправильный выбор при использовании даты в качестве условия [D7, IB6.x]


Avreliy ©   (2003-05-16 15:42:00) 

Здравствуйте мастера.
Вопрос таков: в таблице, среди прочих полей, присутствует таких два поля: DATEBEGIN И DATEEND. Необходимо выбрать все строки таблицы, в промежуток DATEBEGIN..DATEEND которых попадает определённая дата(:DATE). Даты начала и окончания необходимо учитывать. Пишу запрос:
SELECT *
FROM T1
WHERE DATEBEGIN <= :DATE
AND ((DATEEND >= :DATE) OR (DATEEND IS NULL))
Всё работает правильно, за исключением того, что дата окончания
не учитывается. Т.е. если, например, DATEBEGIN = 1 мая, а DATEEND = 10 мая и :DATE = 10 мая, то строка выбрана не будет. Не могу понять, почему?
Для запроса использую компонент QUERY, метод доступа к БД - через BDE.


Wizard_Ex   (2003-05-17 13:57:00) [1]

В общем ЮЮ прав


Wizard_Ex   (2003-05-17 13:52:00) [2]

DATEBEGIN = 1 мая, а DATEEND = 10 мая + 1

Это поможет


ЮЮ   (2003-05-17 05:06:00) [3]

Сорри, твоём случае, наоборот. Убедись, что в :DATE только целая часть


ЮЮ   (2003-05-17 05:00:00) [4]

:DATE = 10 мая 0:00
DATEEND = 10 мая + часть суток меджу 10 мая и 11 мая, поэтому записи на 10 мая и не попадают. В параметре надо ставить или 11 мая 0:00 или 10 мая 23:59


NDeu   (2003-05-17 02:23:00) [5]

1.Поле DATEEND определено как DATE или TIMESTAMP?
2.Параметр Date - AsDate или AsDateTime?


Avreliy   (2003-05-16 17:03:00) [6]

> .ParamByName("Date"):=...
Что это значит?


Silver_   (2003-05-16 16:59:00) [7]


> У тебя два раза повторяется параметр, а это воспринимается
> как два разных параметра, просто задай их одинаковыми.


в таких ситуациях меня спасало
.ParamByName("Date"):=...
значение присваивается всем параметрам с данным именем


Avreliy   (2003-05-16 16:46:00) [8]

>Desdechado
Спасибо, SQL-код исправил, всё работает.
>Что это значит ?
Дело в том, что синхронно с выполнением запроса я фильтрую таблицу. И пишу так:
------------------------------------------------
Accept := ((Table1DATEBEGIN.AsDateTime <= Form1.DateTimePicker1.Date)
AND ((Table1DATEEND.AsDateTime >= Form1.DateTimePicker1.Date)
OR (Table1DATEEND.IsNull)))

------------------------------------------------
И опять-таки, последнее значение даты окончания не учитывается.


Johnmen   (2003-05-16 16:29:00) [9]

Да, я немного стормозил...:)

>Кроме того, как исправить, такой же семантически, код на PASCAL"е?

Что это значит ?


Avreliy   (2003-05-16 16:23:00) [10]

В таком случае не учитывается NULL.
Кроме того, как исправить, такой же семантически, код на PASCAL"е?


Johnmen   (2003-05-16 16:04:00) [11]

Может стоит попробовать
WHERE :DATE BETWEEN DATEBEGIN AND DATEEND ?


Avreliy   (2003-05-16 16:00:00) [12]

Дело не в параметрах...
В другом месте программы при реализации фильтрации указывается точно такое условие, но и результат тот же.


Desdechado   (2003-05-16 16:00:00) [13]

в БДЕ есть глюк: когда параметры названы одинаково, то значение присваивается только первому из них. Назови их по-разному, присвоив одинаковые значения


Avreliy   (2003-05-16 15:51:00) [14]

>Stas
А даже, есди два разных, то как это влияет на выборку? Ведь значение получается одинаковое.


Stas   (2003-05-16 15:45:00) [15]

У тебя два раза повторяется параметр, а это воспринимается как два разных параметра, просто задай их одинаковыми.
Parametrs[0].Value:=date
Parametrs[1].Value:=date


Наверх

Титульная страница Поиск, карта сайта Написать письмо