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 дня, за неделю, за месяц и т.д)
Заранее благодарна!


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

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

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

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


Johnmen   (2005-01-31 21:51:00) [22]

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


Anatoly Podgoretsky   (2005-01-31 21:48:00) [23]

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


Johnmen   (2005-01-31 21:42:00) [24]

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

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


Anatoly Podgoretsky   (2005-01-31 21:41:00) [25]

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


Anatoly Podgoretsky   (2005-01-31 21:39:00) [26]

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] тоже надо в скобках!!!


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

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


Desdechado   (2005-01-31 21:34:00) [28]

тебе ж сказали - параметры
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:24:00) [29]

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;


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

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


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

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


Anatoly Podgoretsky   (2005-01-31 21:05:00) [32]

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

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


Страницы:   1 2

Наверх

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