![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Трехступенчатый запрос
Shved © (2002-12-03 17:33:00)Появилась очередная проблема. Нужно сформировать запрос, который будет выбирать из базы значения с определенной датой, затем из них значения по другому параметру, а из этой выборки опять выбирать по третьему параметру. Я написал примерно следующее:
begin
Form1.Query.Close;
Form1.Query.SQL.Clear;
Form1.Query.SQL.Add("select *");
Form1.Query.SQL.Add("FROM "AutoNew.DB" Bdauto");
Form1.Query.SQL.Add("WHERE AUTOM = :AutoSelect AND DRIVER IN (SELECT DRIVER FROM "AutoNew.DB" WHERE DRIVER = :DriverSelect");
Form1.Query.SQL.Add("and DEN IN (SELECT DEN FROM "AutoNew.DB" WHERE DEN BETWEEN :FirstDay and :SecondDay))");
Form1.Query.SQL.Add("ORDER BY DEN DESC");
Form1.Query.ParamByName("AutoSelect").AsString := AutoName;
Form1.Query.ParamByName("DriverSelect").AsString := DriverName;
Form1.Query.ParamByName("FirstDay").AsDate := DateTimePicker1.Date;
Form1.Query.ParamByName("SecondDay").AsDate := DateTimePicker2.Date;
Form1.Query.Open;
Form1.DBGrid1.DataSource:=Form1.DataSource2;
end;
Но не работает... :( Попереставлял местами запросы, использовал разные операторы выбора (IN, ANY, ALL), но результата не добился. В книгах ответа не нашел. Помогите новичку!
Max Zyuzin (2002-12-04 16:06:00) [1]>Shved © (04.12.02 15:21)
Дык ты посмотри чему у тебя после твоего case стала равна переменная AutoName, и все встанет на свои места...
FreeLancer (2002-12-04 15:53:00) [2]2 Shved ©>
Так, граждане... Практически все вылечил сам
:-))) Продолжай "Самолечение"
Shved (2002-12-04 15:21:00) [3]Так, граждане... Практически все вылечил сам, но есть один вопрос, который никак не могу решить.
Дело в том, что в запросе есть параметры AutoSelect и DriverSelect. Они формируются из ComboBox таким образом:
Form1.Query.ParamByName("AutoSelect").AsString := AutoName;
где AutoName:
case ComboBox1.ItemIndex of
0: AutoName:="Название машины 1";
1: AutoName:="Название машины 2";
....
Но в итоге сортировка идет, но выводится пустая строка. Подозреваю, что AutoName принимает значение без одинарных кавычек. Изменил код на:
case ComboBox1.ItemIndex of
0: AutoName:=(#39+"Название машины 1"+#39);
1: AutoName:=(#39+"Название машины 2"+#39);
....
Но проблема решена не была - опять пустая строка.
Отсюда вопрос: параметр Form1.Query.ParamByName("AutoSelect").AsString должен быть с кавычками? Если да, то что я делаю неправильно? И как правильно прописать присваивание этому параметру нужного текста, по которому будет идти выборка в таблице?
Johnmen (2002-12-03 17:43:00) [4]Ну и ну... Что, одним запросом никак ?
FreeLancer (2002-12-03 17:42:00) [5]
Form1.Query.SQL.Add("select * FROM "AutoNew.DB" Bdauto"+#10#13+
"WHERE AUTOM = :AutoSelect "+#10#13+
"AND DRIVER = :DriverSelect"+#10#13+
"AND DEN >= :FirstDay "+10#13+
"AND DEN <= :SecondDay "+10#13+
"ORDER BY DEN DESC");
passm (2002-12-03 17:41:00) [6]Shved © (03.12.02 17:33)> Exception.Message = ?
Может, ParamByName(...).DataType надо указать.
FreeLancer (2002-12-03 17:37:00) [7]
WHERE DEN >= :FirstDay
AND DEN <= :SecondDay