Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2010, 07:22   #1
RinoVaciO
 
Регистрация: 27.05.2010
Сообщений: 8
По умолчанию ADO. Критерий поиска: значения между датами

Hi all. БД в Access с помощью ADO, из таблицы с полем "дата/время" необходимо вывести данные в промежутке от DateTimePicker1 до DateTimePicker2. Пробовал запрос "Select * From Table Where DatePole between datetimePicker1.date and dateTimePicker2.date" программа выдаёт ошибку: "параметр DateTimePicker1.date не имеет значения по умолчанию". Подскажите пожалуйста как реализовать корректный запрос или другой способ реализации?

From Stilet: Это что так сложно тему свою создать? Обязательно в чужую лезть? В следующий раз горчичник выпишу

Последний раз редактировалось Stilet; 02.06.2010 в 08:01.
RinoVaciO вне форума Ответить с цитированием
Старый 02.06.2010, 07:27   #2
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Код:
select * from table where DatePole  beetween ' + QuotedStr(DateToStr(DateTimePicker1.Date)) + ' and ' + QuotedStr(DateToStr(DateTimePicker2.Date));
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 02.06.2010, 07:41   #3
RinoVaciO
 
Регистрация: 27.05.2010
Сообщений: 8
По умолчанию

Спасибо большое, но вылезает вот такая ошибка: "Несоответствие типов данных в выражении отбора".
RinoVaciO вне форума Ответить с цитированием
Старый 02.06.2010, 07:49   #4
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

А в БД поле с датой какого типа?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 02.06.2010, 08:06   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Несоответствие типов данных в выражении отбора
Правильно вылезает. Артем не учел что в акцессе дата хранится по другому нежели работает функция DateToStr (т.е. скорее всего формат другой)

Код:
select * from table where DatePole  
beetween ' + FormatDateTime('yyyy-mm-dd',DateTimePicker1.Date) + ' and ' + FormatDateTime('yyyy-mm-dd',DateTimePicker2.Date);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.06.2010, 08:12   #6
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
Артем не учел
Теперь на будущее учту
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 02.06.2010, 08:35   #7
RinoVaciO
 
Регистрация: 27.05.2010
Сообщений: 8
По умолчанию

Извините за несоблюдение правил, в следующий раз учту.

Цитата:
Сообщение от artemavd Посмотреть сообщение
А в БД поле с датой какого типа?
В Акцесе поле в формате "дата/время".

После введения представленного кода сразу начинает ругаться на yyyy-mm-dd

Код:
Код:
 DataModule2.ADOQuery.Active:=false;
 DataModule2.ADOQuery.SQL.Clear;
 DataModule2.ADOQuery.SQL.Add('SELECT *');
 DataModule2.ADOQuery.SQL.Add('From Table');
 DataModule2.ADOQuery.SQL.Add('Where DatePole between '' + FormatDateTime('yyyy-mm-dd',DateTimePicker1.Date) + 
' and ' + FormatDateTime('yyyy-mm-dd',DateTimePicker2.Date));
 DataModule2.ADOQuery.Active:=true;
менял на dd-mm-yyyy(как в по), но разницы нет.

Последний раз редактировалось Stilet; 02.06.2010 в 09:31.
RinoVaciO вне форума Ответить с цитированием
Старый 02.06.2010, 09:00   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1)
Цитата:
Константы даты/времени в Access выделяются символами #. Как и в случае остальных констант, если программа распознает ввод в бланк запроса даты или времени в стандартном формате Access, эти символы будут добавлены автоматически.
Пример констант даты и времени: #26/04/75#, #22-Маг-74#, #10:35:30#.
т.е. Ваш запрос должен выглядеть так
Код:
DataModule2.ADOQuery.SQL.Add('Where DatePole between #' +
 FormatDateTime('yyyy/mm/dd',DateTimePicker1.Date) + '# and #' +
 FormatDateTime('yyyy/mm/dd',DateTimePicker2.Date)+'#');
p.s. а вот тут умные люди пишут:
Цитата:
Значения содержащие тип данных Дата/время обрамляются шарпами (Решетками/диезами) и представляются только(!!!) в американском формате, а именно mm/dd/yyyy, например:#05/30/2009#
Хотя я у себя проверил. у меня #YYYY/MM/DD# сработатало... но вот именно поэтому и не надо пользоваться таким подходом! Только передача через параметры!! ТОЛЬКО вариант из пункта 2! И никак не иначе!

2) ВАЖНО!
Крайне не рекомендую передавать дату в запрос в виде строки!
Уж об этом говорили, говорили...
ГОРАЗДО лучше использовать параметрический запрос.
примерно так:
Код:
DataModule2.ADOQuery.SQL.Add('Where DatePole between :pDate1 and :pDate2');
DataModule2.ADOQuery.Parameters.ParamByName('pDate1').Value:=DateTimePicker1.Date;
DataModule2.ADOQuery.Parameters.ParamByName('pDate2').Value:=DateTimePicker2.Date;
Это будет выполняться всегда правильно вне зависимости от формата представления даты на компьютере!!

Последний раз редактировалось Serge_Bliznykov; 02.06.2010 в 09:15.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.06.2010, 09:36   #9
RinoVaciO
 
Регистрация: 27.05.2010
Сообщений: 8
По умолчанию

В первом случае была ошибка такого типа: "Дата содержит синтаксическую ошибку в выражении запроса 'DatePole between #01.05.2009# and #27.05.2010#' "
Во втором случае снова выдаёт вот это "Несоответствие типов данных в выражении условия отбора".

Может быть у меня где-то что-то не прописано?
RinoVaciO вне форума Ответить с цитированием
Старый 02.06.2010, 09:43   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
сразу начинает ругаться на yyyy-mm-dd
А чего у меня все работает и не ругается?

Цитата:
RinoVaciO
А у тебя это поле точно типа дата\время? Там формат в свойствах поля не стоит какой-нибудь заумный?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Интервал между датами в структуре! Telec Общие вопросы C/C++ 0 22.03.2010 20:55
Сложный критерий поиска Обыватель Microsoft Office Excel 2 18.12.2009 09:40
выборка между двумя датами UnChanter БД в Delphi 1 30.03.2009 21:09
Разница между датами kykysya Общие вопросы Delphi 8 26.03.2009 18:22
Разница между датами deenka БД в Delphi 3 31.01.2008 13:21