Сравнение дат

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
dima81
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 26.08.2007 (Вс) 22:36

Сравнение дат

Сообщение dima81 » 08.09.2007 (Сб) 22:32

Подсоединяюсь к базе данных через ADO. В базе данных есть записи

ДатаВРемонт ДатаИзРемонта

07.09.2007 07.09.2007 08.09.2007 08.09.2007 08.09.2007 08.09.2007 06.09.2007 09.09.2007
Есть код:

dat_B = "'" & DTPicker1.Value & "'"
dat_E = "'" & DTPicker2.Value & "'"

Adodc3.RecordSource = "Select * From Ремонты Where Cdate(ДатаВРемонт) >=" & dat_B & _
" And Cdate(ДатаВРемонт) <=" & dat_E & _

В программе я выбираю Даты через DTPicker и нажимаю кнопку, и в DataGrid выводится информация о ремонтах, но почему-то при сравнении сравнивается только число, т.е. я выбираю даты с 04.09.2007 по 09.09.2007 и выводятся все четыре записи. Вроде все работает. Но если я выбираю 04.10.2007 по 09.10.2007, то тоже выводятся все 4 записи, т.е. как я понял игнорируется месяц и год и сравнивается только число. Если выбиираю с 10.09.2007 по неважно какую дату, то не выведется записи, т.к. в базе данных числа 06, 07, 08 (это меньше 10). Хочется, чтобы дата сравнивалась вся, т.е. при выборе 04.10.2007 записи бы не выводились
Кто понял, помогите!

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 08.09.2007 (Сб) 22:50

Какая база? Прочитай, возможно твой случай:
http://bbs.vbstreets.ru/viewtopic.php?t=29841
http://bbs.vbstreets.ru/viewtopic.php?t=27010
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

dima81
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 26.08.2007 (Вс) 22:36

VVitafresh

Сообщение dima81 » 08.09.2007 (Сб) 23:42

Что этот синтаксис
ДатаВРемонт BETWEEN #" & Format(CDate(DTPicker1.Value), "mm\/dd\/yyyy") & "# AND #" & Format(CDate(DTPicker2.Value), "mm\/dd\/yyyy") & "#"

что этот
dat_B = "'" & DTPicker1.Value & "'"
dat_E = "'" & DTPicker2.Value & "'"

Cdate(ДатаВРемонт) >=" & dat_B & _
" And Cdate(ДатаВРемонт) <=" & dat_E &

получается одно и тоже. У меня в базе акссесс датаВРемонт 07.09.2007. Выбираю в DTPicker1 04.10.2007 - в результате все равно выводит записи. Почему он сравнивает только по числу, а не по числу, месяцу и году?

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 09.09.2007 (Вс) 0:31

Поменяй в базе тип поля с текстового на Дата/Время.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

dima81
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 26.08.2007 (Вс) 22:36

Сообщение dima81 » 09.09.2007 (Вс) 9:45

У меня такой тип и стоял. Вроде код,который вы дали должен работать, но проблема та же. Не знаю в чем дело.

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 09.09.2007 (Вс) 12:47

Выведи текст запроса, напр. через debug.print и попробуй его выполнить непосредственно в Access. Посмотри на результат. Поэксперементируй с запросом.

Попробуй другой формат представления даты: вместо #mm/dd/yyyy# поставь 'yyyy-mm-dd' (напр. '2007-09-30').

В общем, все исходные данные у тебя, ищи свой вариант решения.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

dima81
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 26.08.2007 (Вс) 22:36

VVitafresh

Сообщение dima81 » 09.09.2007 (Вс) 12:59

VVitafresh, кажется понял в чем дело:

просто я выбираю первую дату в DTPicker1 и нажимаю выполнить, а программа, я так понял, игнорирует то, что написано в DTPicker2 и выдает некорректный результат. Как только я выбираю дату в DTPicker2 результат становится корректным, например:

в DTPicker1 выбираю 02.10.2007, а в DTPicker2 по умолчанию стоит 08.09.2007 и выдается результат, но как только я меняю в DTPicker2 дату, например на 09.09.2007 - ничего не выдается, как и должно быть

dima81
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 26.08.2007 (Вс) 22:36

Сообщение dima81 » 09.09.2007 (Вс) 17:41

VVitafresh, код
BETWEEN #" & Format(CDate(DTPicker1.Value), "mm\/dd\/yyyy") & "# AND #" & Format(CDate(DTPicker2.Value), "mm\/dd\/yyyy") & "#"

работает на 100% без всяких но.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Majestic-12 [Bot], Yandex-бот и гости: 91

    TopList