![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Использую 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