Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Трехступенчатый запрос


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


Наверх

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