Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.05;
Скачать: CL | DM;

Вниз

Неправильный выбор при использовании даты в качестве условия   Найти похожие ветки 

 
Avreliy   (2003-05-16 15:42) [0]

Здравствуйте мастера.
Вопрос таков: в таблице, среди прочих полей, присутствует таких два поля: 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.


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

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



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

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


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

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


 
Desdechado ©   (2003-05-16 16:00) [4]

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


 
Johnmen ©   (2003-05-16 16:04) [5]

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


 
Avreliy   (2003-05-16 16:23) [6]

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


 
Johnmen ©   (2003-05-16 16:29) [7]

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

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

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


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

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

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



 
Silver_ ©   (2003-05-16 16:59) [9]


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


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


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

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


 
NDeu ©   (2003-05-17 02:23) [11]

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


 
ЮЮ ©   (2003-05-17 05:00) [12]

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


 
ЮЮ ©   (2003-05-17 05:06) [13]

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


 
Wizard_Ex ©   (2003-05-17 13:52) [14]

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

Это поможет


 
Wizard_Ex ©   (2003-05-17 13:57) [15]

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



Страницы: 1 вся ветка

Текущий архив: 2003.06.05;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.019 c
6-13344
kerrik
2003-04-02 20:35
2003.06.05
Как определить траффик под Win9x во время нахождения в сети


14-13450
SPeller
2003-05-20 07:38
2003.06.05
Что такое Дельфийские игры?


1-13322
Flex
2003-05-25 13:13
2003.06.05
Есть ли возможность снизить мерцание компонента?


1-13215
___Nikolay
2003-05-27 07:30
2003.06.05
Как при щелчке на компоненте сделать так, чтобы он


14-13395
Dmitriy O.
2003-05-16 09:35
2003.06.05
Организация хранения кода