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

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

Вопрос по SQL запросу [D7]


Страницы:   1 2

Руслана ©   (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


Страницы:   1 2

Наверх

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