Форум: "Базы";
Текущий архив: 2002.12.23;
Скачать: [xml.tar.bz2];
ВнизТрехступенчатый запрос Найти похожие ветки
← →
Shved (2002-12-03 17:33) [0]Появилась очередная проблема. Нужно сформировать запрос, который будет выбирать из базы значения с определенной датой, затем из них значения по другому параметру, а из этой выборки опять выбирать по третьему параметру. Я написал примерно следующее:
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), но результата не добился. В книгах ответа не нашел. Помогите новичку!
← →
FreeLancer (2002-12-03 17:37) [1]
WHERE DEN >= :FirstDay
AND DEN <= :SecondDay
← →
passm (2002-12-03 17:41) [2]Shved © (03.12.02 17:33)> Exception.Message = ?
Может, ParamByName(...).DataType надо указать.
← →
FreeLancer (2002-12-03 17:42) [3]
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");
← →
Johnmen (2002-12-03 17:43) [4]Ну и ну... Что, одним запросом никак ?
← →
Shved (2002-12-04 15:21) [5]Так, граждане... Практически все вылечил сам, но есть один вопрос, который никак не могу решить.
Дело в том, что в запросе есть параметры 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 должен быть с кавычками? Если да, то что я делаю неправильно? И как правильно прописать присваивание этому параметру нужного текста, по которому будет идти выборка в таблице?
← →
FreeLancer (2002-12-04 15:53) [6]2 Shved ©>
Так, граждане... Практически все вылечил сам
:-))) Продолжай "Самолечение"
← →
Max Zyuzin (2002-12-04 16:06) [7]>Shved © (04.12.02 15:21)
Дык ты посмотри чему у тебя после твоего case стала равна переменная AutoName, и все встанет на свои места...
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.12.23;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c