![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите с форматом запроса [D6, Access]
Владий © (2003-12-29 18:08:00)
Суть такова - в зависимости от указанной даты в определенном поле должет отбираться курс на указанную дату или ранее.
var Dstr :string;
begin
Dstr:= DateC.DataBinding.StoredValue;
MainForm.LastCours.SQL.Clear;
MainForm.LastCours.SQL.Add("SELECT Max(Date) AS LastDate FROM Courses "+
"WHERE Courses.Date<=Date("+ Dstr +")");
И получаю ругань, что Date(01.12.03) - неправльно.
Подскажите - что не так делаю?...
Владий (2003-12-30 10:42:00) [1]
О пока думал и писал мне готовый ответ дали... Спасибо огромное!
Владий (2003-12-30 10:38:00) [2]
Что-то меня совсем клинит - чем ближе НГ, тем я тупее...
Как найти последнюю дату я понял:
MainForm.LastCours.SQL.Add("SELECT Max(Date) AS LastDate, * FROM Courses WHERE ((Courses.Date)<=CDate("""+Dstr+"""))");
Но вот как потом отобрать курс по заданной валюте - мне уже не понять... =(((
sniknik (2003-12-30 10:30:00) [3]
тогда так можно и без ID
select * from course
where data =
(select max(data) from course where date <= :MyCoursedate)
MyCoursedate параметр, заноси туда именно дату (datetime), можеш заменить на вышеперечисленное (смотри только день с месяцем не перепутай, сдесь это легко, и ошибки не даст)
типа date <= #01/12/2003#
(вместо * можно одно нужное поле MyCourse)
Владий (2003-12-30 08:53:00) [4]
Дата только одна на каждый курс. Все повторные - автоматом удаляются. А курс мне и нужен - максимальный по отношению к дате, указанной в DateC...
sniknik (2003-12-29 19:03:00) [5]
> не смог понять как мне привести "01.12.03"к формату,
правильнее вставить параметр
но можно и CDate("12.01.03") и #01/12/2003# и DateSerial(2003, 01, 12) и даже CDate("2003 Январь 12") ....
но этим запросом ты только максимальную дату получиш а не запись с ней, а именно она и нужна судя по всему.
у тебя в этой таблице ключевое поле есть (по автоикременту)? и дата может быть одна или несколько (сколько раз в день можно курс менять)?
paul_k (2003-12-29 18:56:00) [6]
точнее написать запрос следующим образом
1 where date < DateAdd ("d"; 1;:Mydate)
2 мне кажется что важнее получить id курса а таким запросом его не вытащить.
попробуй так
select * from course
where data = (select max(c.data)
from course c
where data <where date < DateAdd ("d"; 1;:MyCoursedate))
abd cur_id = :MyCurrencyCode
Если не хочеш развлечений с установленными юсерами форматами даты заполняй значения параметров
Если на это наплевать то вполне кушает строки в кавычках
Уж извини коль лишнего наплел. Сам с этими граблями разбирался довольно долго при поиске последнего перед датой курса или котировки
Владий (2003-12-29 18:44:00) [7]
А мог и напутать... почему и спрашиваю - не смог понять как мне привести "01.12.03"к формату, который бы сравнен с полем Courses.Date (DateTime)...
sniknik (2003-12-29 18:32:00) [8]
> ...да, и кстати, что за ф-ия date ?????????????/
текущая дата, только она без параметров.
Johnmen (2003-12-29 18:13:00) [9]
...да, и кстати, что за ф-ия date ?????????????/
Johnmen (2003-12-29 18:12:00) [10]
Формат даты неверен...
Пользуйся параметрическим заданием даты.