![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос по SQL запросу [D7]
Руслана © (2005-01-31 20:58:00)Имеется DBGridEH подключенный через ADOQuery к базе Acces.
Каждая запись имеет свою дату отображаемую в определенном столбце. Как сформировать SQL запрос "Отобразить записи за последние 3 дня"?
Даты записаны в таком формате 31/01/05
Причем запросы могут быть разными (за 3 дня, за неделю, за месяц и т.д)
Заранее благодарна!
Anatoly Podgoretsky (2005-02-03 21:49:00) [1]sniknik © (03.02.05 17:59) [27]
Это еще ничего, а вот 01/02/2005 пострашнее
Руслана (2005-02-03 20:39:00) [2]Уже все работает!!! ВСем спасибо большое за помощь!
Соловьев (2005-02-03 18:22:00) [3]
> менять просто необходимо, а тогда уж сразу в дату.
согласен. и как можно быстрее, пока неоднозначтости не появилось
sniknik (2005-02-03 18:18:00) [4]> хм...выдал одинаковые даты
ну, и ты будеш им теперь доверять? ;о))
формат записи строкой должен быть изменен на ODBC ansi стандарт, тогда ошибку выдаст при неправильном вводе (чего ожидается по логике)
но тут случай то другой, данные то уже есть... и менять просто необходимо, а тогда уж сразу в дату.
Соловьев (2005-02-03 18:13:00) [5]
> для интересующихся, выполните не поленитесь запросик
> SELECT CDate('29/01/05') AS D1, CDate('01/29/05') AS D2
> и сравните результаты.
хм...выдал одинаковые даты
sniknik (2005-02-03 17:59:00) [6]с символьной датой хлебнеш таки горя... ;о)) лучше делать обратные преобразования (из даты в строку), а еще лучше не делать вообще, работать как с датой.
для интересующихся, выполните не поленитесь запросик
SELECT CDate('29/01/05') AS D1, CDate('01/29/05') AS D2
и сравните результаты.
(можно обойти ;о), но зачем? дата еше и быстрее)
Соловьев (2005-02-03 17:16:00) [7]Можно попробовать...
...
DataModule1.BookName.SQL.Add('SELECT *');
DataModule1.BookName.SQL.Add('FROM [Справочник1]');
DataModule1.BookName.SQL.Add('WHERE CDate([Дата])>=:D');
...
Соловьев (2005-02-03 17:02:00) [8]
> А в аксесе нет аналога оракловой TO_DATE?
CDate('29/01/05')
Sergey13 (2005-02-03 16:51:00) [9]А в аксесе нет аналога оракловой TO_DATE?
Соловьев (2005-02-03 16:47:00) [10]
> У меня поле дата символьное.
сделать его датой - или проблем не оберешся.
> И как мне составить запрос?
а потом - тебе уже кучу правильніх ответов дали.
Руслана (2005-02-03 16:45:00) [11]У меня поле дата символьное. И как мне составить запрос?
Соловьев (2005-02-03 16:40:00) [12]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;
Sergey13 (2005-02-03 16:39:00) [13]2[18] Руслана (03.02.05 16:30)
Так у тебя поле [Дата] какого типа? Стринговое что ли? Если да, то чего же ты хочешь?
Johnmen (2005-02-03 16:39:00) [14]Так поле с датой у тебя символьное !!! И по умолчанию АДО думает, что месяц на втором месте, когда выполняются неявные преобразования типов.
Сделай по-человечески, и будет счастье...
Руслана (2005-02-03 16:30:00) [15]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;
Пробовала как писал Анатолий - вообще ничего не отображается, почему - загадка
Sergey13 (2005-02-03 16:27:00) [16]2[16] Руслана (03.02.05 16:23)
Может они по другой причине не отбражаются?
Код и запрос трудно привести?
Руслана (2005-02-03 16:23:00) [17]Работает, но как-то странно.
Отобразить за 3 дня - отображаються записи
29/01/05
30/01/05
31/01/05
03/02/05
а записи за 01/02/05 и 02/02/05 не отображаются.
Такое чуство что число отнимается только от даты (не учитывается месяц и год)
ЮЮ (2005-02-02 03:54:00) [18]Cорри, тогда
ParamByName('D').DataType := ftDateTime;
ParamByName('D').Value := Date() - 3;
Руслана (2005-02-01 23:27:00) [19]Если DataModule1.BookName.Parameters.ParamByName('D').asDateTime
то выдает ошибку "Undeclared identifer asDateTime"
ЮЮ (2005-02-01 05:08:00) [20]Тогда попробуй ParamByName('D'). asDateTime:= Date - 3