Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];

Вниз

Вопрос по SQL запросу   Найти похожие ветки 

 
Руслана   (2005-01-31 20:58) [0]

Имеется DBGridEH подключенный через ADOQuery к базе Acces.
Каждая запись имеет свою дату отображаемую в определенном столбце. Как сформировать SQL запрос "Отобразить записи за последние 3 дня"?
Даты записаны в таком формате 31/01/05
Причем запросы могут быть разными (за 3 дня, за неделю, за месяц и т.д)
Заранее благодарна!


 
Anatoly Podgoretsky ©   (2005-01-31 21:05) [1]

Не важно в каком формате, используй параметры, а параметру присвой значение Date - N, где Т количество предыдущих дней.
Пример

"... where DateField>=:D";
.ParamByName("D").Value := Date - 3;


 
Anatoly Podgoretsky ©   (2005-01-31 21:06) [2]

Примечание: Даты записаны в таком формате 31/01/05 так можно говорить, если даты в таблицы не даты, а строки.


 
Руслана   (2005-01-31 21:08) [3]

Сейчас попробую, спасибо!


 
Руслана   (2005-01-31 21:24) [4]

To Anatoly Podgoretsky - а не могли бы Вы написать полностью запрос. Что-то я не понимаю
Поле с датой имеет имя [Дата]
DataModule1.BookName.Active:=false;
DataModule1.BookName.SQL.Clear;
DataModule1.BookName.SQL.Add("SELECT *");
DataModule1.BookName.SQL.Add("FROM Справочник1 ");
DataModule1.BookName.SQL.Add("WHERE [Дата]>=Date-3");
DataModule1.BookName.Active:=true;


 
Desdechado ©   (2005-01-31 21:34) [5]

тебе ж сказали - параметры
DataModule1.BookName.SQL.Add("SELECT *");
DataModule1.BookName.SQL.Add("FROM Справочник1 ");
DataModule1.BookName.SQL.Add("WHERE [Дата]>=:D");
DataModule1.BookName.ParamByName("D").Value := Date - 3;
DataModule1.BookName.Open;


 
Руслана   (2005-01-31 21:38) [6]

Пишет ошибку
Undeclared identifer "ParamByName"


 
Anatoly Podgoretsky ©   (2005-01-31 21:39) [7]

DataModule1.BookName.Active:=false;
DataModule1.BookName.SQL.Clear;
DataModule1.BookName.SQL.Add("SELECT *");
DataModule1.BookName.SQL.Add("FROM [Справочник1]");
DataModule1.BookName.SQL.Add("WHERE [Дата]>=:D");
DataModule1.BookName.Parameters.ParseSQL(DataModule1.BookName.SQL.Text, TRUE);
DataModule1.BookName.Parameters.ParamByName("D").Value := Date-3;
DataModule1.BookName.Active:=true;

Это для АДО, для других аналогично, только названия свойств могут быть другие. Вместо -3 любое другое значение.
[Справочник1] тоже надо в скобках!!!


 
Anatoly Podgoretsky ©   (2005-01-31 21:41) [8]

Если этот же код введен в SQL в дизайн тайм, то ParseSQL можно опустить.


 
Johnmen ©   (2005-01-31 21:42) [9]

>Anatoly Podgoretsky ©  (31.01.05 21:39) [7]
>DataModule1.BookName.Parameters.ParseSQL(DataModule1.BookName.SQL.Text, TRUE);

Это лишнее...:)


 
Anatoly Podgoretsky ©   (2005-01-31 21:48) [10]

Как сказать, для вручную формируемых запросов не лишнее. Если запрос создан в дизайн тайм и созданы параметры, то конечно лищнее, но это я отметил в дополнении. Без ParseSQL могут быть казусы, правда и с ним могут быть.


 
Johnmen ©   (2005-01-31 21:51) [11]

М.б. и могут... Но я лично не сталкивался.


 
Руслана   (2005-01-31 22:56) [12]

DataModule1.BookName.Parameters.ParamByName("D").Value := Date-3; - При это конструкции не отображается ни одной записи

DataModule1.BookName.Parameters.ParamByName("D").Value := Date -
При этой отображаются сегодняшние записи

DataModule1.BookName.Parameters.ParamByName("D").Value := Date-0
При этой снова ничего не отображается
Почему?


 
ЮЮ ©   (2005-02-01 05:08) [13]

Тогда попробуй ParamByName("D").asDateTime :=  Date - 3


 
Руслана   (2005-02-01 23:27) [14]

Если DataModule1.BookName.Parameters.ParamByName("D").asDateTime
то выдает ошибку "Undeclared identifer asDateTime"


 
ЮЮ ©   (2005-02-02 03:54) [15]

Cорри, тогда

ParamByName("D").DataType := ftDateTime;
ParamByName("D").Value := Date() - 3;


 
Руслана   (2005-02-03 16:23) [16]

Работает, но как-то странно.
Отобразить за 3 дня - отображаються записи
29/01/05
30/01/05
31/01/05
03/02/05

а записи за 01/02/05 и 02/02/05 не отображаются.
Такое чуство что число отнимается только от даты (не учитывается месяц и год)


 
Sergey13 ©   (2005-02-03 16:27) [17]

2[16] Руслана   (03.02.05 16:23)
Может они по другой причине не отбражаются?
Код и запрос трудно привести?


 
Руслана   (2005-02-03 16:30) [18]

var S:string;
begin
S:= FormatDateTime("dd/mm/yy", (Date-3);
DataModule1.BookName.Active:=false;
DataModule1.BookName.SQL.Clear;
DataModule1.BookName.SQL.Add("SELECT *");
DataModule1.BookName.SQL.Add("FROM [Справочник1]");
DataModule1.BookName.SQL.Add("WHERE [Дата]>=:D");
DataModule1.BookName.Parameters.ParamByName("D").Value := S;
DataModule1.BookName.Active:=true;

Пробовала как писал Анатолий - вообще ничего не отображается, почему - загадка


 
Johnmen ©   (2005-02-03 16:39) [19]

Так поле с датой у тебя символьное !!! И по умолчанию АДО думает, что месяц на втором месте, когда выполняются неявные преобразования типов.
Сделай по-человечески, и будет счастье...


 
Sergey13 ©   (2005-02-03 16:39) [20]

2[18] Руслана   (03.02.05 16:30)
Так у тебя поле [Дата] какого типа? Стринговое что ли? Если да, то чего же ты хочешь?


 
Соловьев ©   (2005-02-03 16:40) [21]

DataModule1.BookName.Active:=false;
DataModule1.BookName.SQL.Clear;
DataModule1.BookName.SQL.Add("SELECT *");
DataModule1.BookName.SQL.Add("FROM [Справочник1]");
DataModule1.BookName.SQL.Add("WHERE [Дата]>=:D");
DataModule1.BookName.ParamCheck := true;
DataModule1.BookName.Parameters[0].Value := Date - 3;
DataModule1.BookName.Active:=true;


 
Руслана   (2005-02-03 16:45) [22]

У меня поле дата символьное. И как мне составить запрос?


 
Соловьев ©   (2005-02-03 16:47) [23]


> У меня поле дата символьное.

сделать его датой - или проблем не оберешся.

> И как мне составить запрос?

а потом  - тебе уже кучу правильніх ответов дали.


 
Sergey13 ©   (2005-02-03 16:51) [24]

А в аксесе нет аналога оракловой TO_DATE?


 
Соловьев ©   (2005-02-03 17:02) [25]


> А в аксесе нет аналога оракловой TO_DATE?

CDate("29/01/05")


 
Соловьев ©   (2005-02-03 17:16) [26]

Можно попробовать...

...
DataModule1.BookName.SQL.Add("SELECT *");
DataModule1.BookName.SQL.Add("FROM [Справочник1]");
DataModule1.BookName.SQL.Add("WHERE CDate([Дата])>=:D");
...


 
sniknik ©   (2005-02-03 17:59) [27]

с символьной датой хлебнеш таки горя... ;о)) лучше делать обратные преобразования (из даты в строку), а еще лучше не делать вообще, работать как с датой.
для интересующихся, выполните не поленитесь запросик
SELECT CDate("29/01/05") AS D1, CDate("01/29/05") AS D2
и сравните результаты.

(можно обойти ;о), но зачем? дата еше и быстрее)


 
Соловьев ©   (2005-02-03 18:13) [28]


> для интересующихся, выполните не поленитесь запросик
> SELECT CDate("29/01/05") AS D1, CDate("01/29/05") AS D2
> и сравните результаты.

хм...выдал одинаковые даты


 
sniknik ©   (2005-02-03 18:18) [29]

> хм...выдал одинаковые даты
ну, и ты будеш им теперь доверять? ;о))

формат записи строкой должен быть изменен на ODBC ansi стандарт, тогда ошибку выдаст при неправильном вводе (чего ожидается по логике)
но тут случай то другой, данные то уже есть... и менять просто необходимо, а тогда уж сразу в дату.


 
Соловьев ©   (2005-02-03 18:22) [30]


>  менять просто необходимо, а тогда уж сразу в дату.

согласен. и как можно быстрее, пока неоднозначтости не появилось


 
Руслана   (2005-02-03 20:39) [31]

Уже все работает!!! ВСем спасибо большое за помощь!


 
Anatoly Podgoretsky ©   (2005-02-03 21:49) [32]

sniknik ©   (03.02.05 17:59) [27]
Это еще ничего, а вот 01/02/2005 пострашнее



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.031 c
14-1108492975
Michael5
2005-02-15 21:42
2005.03.06
Как заменить родное событие компонента своим?


14-1108537985
stud
2005-02-16 10:13
2005.03.06
написание ТЗ


1-1109175278
novice_man
2005-02-23 19:14
2005.03.06
Память и


4-1106295756
Stanislav
2005-01-21 11:22
2005.03.06
Ответ на сообщение


4-1106394485
Islander
2005-01-22 14:48
2005.03.06
Как получить из системы названия кнопок Retry, Ignore, Cancel





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский