Помощник
Здравствуйте, гость ( Вход | Регистрация )
|
|
21:02:2008, 22:23
|
|
Новенький ![]() Группа: Программист Сообщений: 1 Регистрация: 21:02:2008 Пользователь №: 15 465 Репутация: 0
|
Господа!
Ни где не могу встретить примера, как сделать выборку из БД MS Access записей, в пределах от одного dd/mm/yyyy hh:mm:ss до другого dd/mm/yyyy hh:mm:ss. Я написал запрос: "SELECT * FROM report WHERE aDate >= DateValue('" + FormatDateTime("dd/mm/yyyy hh:mm:ss",Start) + "') AND aDate <= DateValue('" + FormatDateTime("dd/mm/yyyy hh:mm:ss",End) + "') ORDER BY aDate"; Но в ответ возвращаются все записи, начинающиеся с dd/mm/yyyy 00:00:00 переменной Start и до dd/mm/yyyy 00:00:00 переменной End. Такое впечатление, будь-то значения поля времени просто игнорируются и заменяются нулями, хотя я проверял, там стоят не нули! Результат аналогичный, даже если я вообще вообще убираю время, т.е. "SELECT * FROM report WHERE aDate >= DateValue('" + FormatDateTime("dd/mm/yyyy",Start) + "') AND aDate <= DateValue('" + FormatDateTime("dd/mm/yyyy",End) + "') ORDER BY aDate"; Оба этих запроса возвращаются одни и те же записи. Но во втором запросе это объяснимо, а в первом - непонятно... P.S. Работаю в Builder C++ 6. |
|
Сообщение
#1
|
|
![]() |
|
|
21:02:2008, 23:08
|
|
Божественный ![]() ![]() ![]() ![]() ![]() Группа: Модеры Сообщений: 1 200 Регистрация: 17:05:2006 Из: Минск Пользователь №: 4 257 Специализация: .NET Репутация: 27
|
Скорее всего DateValue возвращает именно дату, а не дату и время.
А зачем вообще колдовство с DateValue и FormatDateTime? Можно же дату как параметр передать, не преобразовывая его в строку. Будет что-то вроде Код query->SQL.Text = "SELECT * FROM report WHERE aDate >= :StartDate and aDate <= :EndDate";
... query->ParamByName("StartDate")->AsDateTime = Start; query->ParamByName("StartEnd")->AsDateTime = End; |
|
Сообщение
#2
|
|
|
|
22:02:2008, 07:14
|
|
============== ![]() ![]() ![]() ![]() ![]() Группа: Модеры Сообщений: 1 740 Регистрация: 11:01:2007 Пользователь №: 8 750 Специализация: specialist Репутация: 27
|
Цитата(Pasha @ 22:02:2008, 01:08 ) Можно же дату как параметр передать Не можно, а нужно! Да и between надо пользовать в таких ситуациях. |
|
Сообщение
#3
|
|
|
|
22:02:2008, 13:39
|
|
Новенький ![]() Группа: Программист Сообщений: 97 Регистрация: 4:07:2007 Из: РБ. Минская обл. Пользователь №: 11 692 Специализация: C++, Delphi, Oracle, PL/SQL developer Репутация: 4
|
Весь фокус в том, что в Аксессе дата в строковом представлении должна выглядеть так: #dd/mm/yyyy#. Т.е. сама дата должна быть заключена не в кавычки (как строка), а в решётки.
|
|
Сообщение
#4
|
|
|
|
22:02:2008, 13:51
|
|
Божественный ![]() ![]() ![]() ![]() ![]() Группа: Модеры Сообщений: 1 200 Регистрация: 17:05:2006 Из: Минск Пользователь №: 4 257 Специализация: .NET Репутация: 27
|
Для: Over
Фокус в том, что за вставку даты в строковом представлении надо сразу бить по рукам. |
|
Сообщение
#5
|
|
![]() |
|
Текстовая версия | Сейчас: 16:05:2008 - 17:33 |