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