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

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

Делфи и SQL запрос с датой [D6, Access]


ВицеЧайник ©   (2004-11-17 16:28:00) 

База Access

в Delphi:
TADOQuery.SQL если пишу:

Select Поле From База
 Where пДатаВремя BETWEEN #01/01/2004# AND #21/11/2005#

работает, а если так:
   
Select Поле From База
 Where пДатаВремя BETWEEN :prmDate1 AND :prmDate2

то результат Nul

в модуле:

   Active := False;
   Parameters.ParamValues['PrmDate1'] := Date;
   Parameters.ParamValues['PrmDate2'] := Date;
   Active := True;

где грабли?


Anatoly Podgoretsky   (2004-11-19 12:22:00) [1]

ВицеЧайник   (17.11.04 16:40) [5]
Нет у тебя в базе таких записей


sniknik   (2004-11-19 11:27:00) [2]

> а не работает:
> Parameters.ParamValues['PrmDate1'] := ПеременнаяTипа_TDateTime
не работает у тебя не потому что тот же DateTime другим способом задаеш а потому что и в первом и во втором параметре Date задаеш, периода не получается (0-0 что между ними?) а текущей даты у тебя в базе видимо нет.
вот так проверь, тоже сработает

Parameters.ParamValues['PrmDate1'] := StartOfAYear(Date);
Parameters.ParamValues['PrmDate2'] := Date;


ВицеЧайник   (2004-11-19 09:46:00) [3]

Sniknik! большое спасибо.
Только, если не жалко времени, поясни, почему

работает
Parameters.ParamValues['PrmDate1'] := StrToDate('01.01.2004');

а не работает:
Parameters.ParamValues['PrmDate1'] := ПеременнаяTипа_TDateTime
в чём разница, ведь д.б.
ПеременнаяTипа_TDateTime = StrToDate('01.01.2004')


sniknik   (2004-11-17 17:22:00) [4]

>  Select Поле From База
>   Where пДатаВремя BETWEEN #01/01/2004# AND #21/11/2005#

не равно
 
> Select Поле From База
>  Where пДатаВремя BETWEEN :prmDate1 AND :prmDate2

> Active := False;
> Parameters.ParamValues['PrmDate1'] := Date;
> Parameters.ParamValues['PrmDate2'] := Date;

равнозначные параметры дадут тот же результат
Parameters.ParamValues['PrmDate1'] := StrToDate('01.01.2004');
Parameters.ParamValues['PrmDate2'] := StrToDate('21.11.2004');


Johnmen   (2004-11-17 16:43:00) [5]

>ВицеЧайник   (17.11.04 16:40) [5]

Не-а. Не должен. Разве что время в составе значений поля таблицы есть 0.


Johnmen   (2004-11-17 16:41:00) [6]

>Почему? Это же дата, ы?

Потому что я взглюкнул на тему Now<>Date
:)


ВицеЧайник   (2004-11-17 16:40:00) [7]

вдогонку: и даже, если они одинаковые, то должны выдавать записи, которые удовлетворяют условие (такие есть), а он молчит ...


ВицеЧайник   (2004-11-17 16:38:00) [8]

При Date1 <> Date2 результат тот-же, я имел ввиду, что переменная там типа TDateTime ...


Nikolay M.   (2004-11-17 16:34:00) [9]


> значения параметров будут одинаковы с точностью 13.7 наносекунд

Почему? Это же дата, ы?


Johnmen   (2004-11-17 16:32:00) [10]

>где грабли?

Здесь
Parameters.ParamValues['PrmDate1'] := Date;
Parameters.ParamValues['PrmDate2'] := Date;

значения параметров будут одинаковы с точностью 13.7 наносекунд
:)


Nikolay M.   (2004-11-17 16:32:00) [11]


> Parameters.ParamValues['PrmDate1'] := Date;
> Parameters.ParamValues['PrmDate2'] := Date;

Запорс получается вида

...
пДатаВремя >= Date AND пДатаВремя < Date


Наверх

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