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

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

Использую TADOQuery1.Запрос 'SELECT * FROM DB WHERE DB.DATA=01/06 [D6, Access]


casper ©   (2004-02-16 21:45:00) 

Люди добрые помогите пожалуйста!!!
Использую TADOQuery1.Запрос 'SELECT * FROM DB WHERE DB.DATA=01/06/2004' ничего не выдает хотя у меня в базе точно есть такие записи. в чём проблема.Провайдер JET4.0.


maxon   (2004-02-19 10:58:00) [1]

здравствуйте, вопрос на засыпку

> sniknik ©   (16.02.04 23:04) [3]
> так
> SELECT * FROM DB WHERE DATA=#01/06/2004#
> хотя лутше всеже через параметр.

а какая разница через SQL строку или через параметр, просто ради карасоты? или всё же есть разница?


Fay   (2004-02-17 13:51:00) [2]

8)


casper   (2004-02-17 13:46:00) [3]

Наконец-то дошло и до меня. Я просто я думал что если у поля DATA тип TDateTime  то при присвоении DATA=01/06/2004 знак '/' не может восприниматься как деление.


sniknik   (2004-02-17 13:21:00) [4]

> Я просто не понял почему SELECT * FROM DB WHERE DATA=#01/06/2004# делает выборку правильно а SELECT * FROM DB WHERE
> DATA=01/06/2004 ничего не возвращает хотя синтактически запрос принимается.
дата это число в определенном представлении, и оно, это представление явно не получится(не сойдется с реальным) если еденицу сначала поделить на 6 а после результат еще на 2004.
а то что синтаксис принимается, что такого? число с числом сравнивается.


casper   (2004-02-17 13:14:00) [5]

Спасибо всё работает прекрасно.Вопрос закрыт.

>>Интересно как воспринимается значение 01/06/2004/ в запросе  'SELECT * FROM DB WHERE DB.DATA=01/06/2004' , ведь не >>выдается никакого сообщения об ошибки.

Я просто не понял почему SELECT * FROM DB WHERE DATA=#01/06/2004# делает выборку правильно а SELECT * FROM DB WHERE DATA=01/06/2004 ничего не возвращает хотя синтактически запрос принимается.


Artem03   (2004-02-17 13:08:00) [6]

Что касается MS SQL, то у него по умолчанию формат даты - mdy, поэтому вещи типа DateToStr будут давать ошибку (они переводят дату в строку в соответствии с настройкой ОС), поэтому лучше использовать FormatDateTime для этих вещей. Кроме того, для работы с датами последние должны быть представлены как строки (в одинарных или двойних кавычках, '  или ").
В общем так, или дата представлена в виде MS SQL, или в начале сессии стоит команда set dateformat с определением нужного формата


Fay   (2004-02-17 12:58:00) [7]

select blabla form bububu where jopa = '06/01/2004'
НЕ РАБОТАЕТ?! Очень странно.


sniknik   (2004-02-17 12:47:00) [8]

> ADOQUERY1.Parameters.Items[0].Value:=Date1.  Выборка ничего не
Date1 типа дататайм? т.е. с секундами, а у тебя точное равенство. можеш так проверить
ADOQUERY1.Parameters.Items[0].Value:= Trunc(Date1);


sniknik   (2004-02-17 12:43:00) [9]

>... 01/06/2004. ведь не выдается никакого сообщения об ошибки.  
а почему должно выдавать? другое представление той же записи (01 / 06) / 2004 ну как это верное представление?

> Пробовал и так:
> ADOQUERY1.Parameters.Items[0].Value:='#'+DateToStr(Date1)+'#'.Конечно же выдает ошидку несовместимости типов.
надо так
ADOQUERY1.Parameters.Items[0].Value:=Date1;


casper   (2004-02-17 12:03:00) [10]

Спасибо большое Sniknik. Сработало.
Интересно как воспринимается значение 01/06/2004/ в запросе  'SELECT * FROM DB WHERE DB.DATA=01/06/2004' , ведь не выдается никакого сообщения об ошибки.  

>>ShortDateFormat только определяет формат отображения данных на клиенте и никак не зависит на вид SQL предложения.
Все равно в случае 'SELECT * FROM DB WHERE DB.DATA=#'+DateToStr(Data1)+'#'; мне сначала надо задать ShortDateFormat:='mm/dd/yyyy' чтобы в запрос воспринял дату правильно.

А можно ещё один вопрос?
Как сделать это через параметр. Я создаю параметр parDATA(ftDate).Запрос:
SELECT * FROM DB WHERE DB.DATA=:parDATA.Потом присваиваю
ADOQUERY1.Parameters.Items[0].Value:=Date1.  Выборка ничего не
возвращает.Пробовал и так:
ADOQUERY1.Parameters.Items[0].Value:='#'+DateToStr(Date1)+'#'.Конечно же выдает ошидку несовместимости типов.


SPIRIT   (2004-02-17 07:02:00) [11]

01.06.2004


ЮЮ   (2004-02-17 05:24:00) [12]

ShortDateFormat только определяет формат отображения данных на клиенте и никак не зависит на вид SQL предложения. Параметры, параметры и только параметры


sniknik   (2004-02-16 23:04:00) [13]

так
SELECT * FROM DB WHERE DATA=#01/06/2004#
хотя лутше всеже через параметр.


casper   (2004-02-16 22:31:00) [14]

Вообще я задаю ShortDateFormat:='dd/mm/yyyy' при создании формы.
Пробовал писать ShortDateFormat:='mm/dd/yyyy' и '06/01/2004'вместо '01/06/2004'  . Не помогает. Может я что-то не так понял.


Fay   (2004-02-16 22:16:00) [15]

Это mm/dd/yyyy


Наверх

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