Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.23;
Скачать: CL | DM;

Вниз

Трехступенчатый запрос   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
8-74855
lexusU
2002-09-06 09:55
2002.12.23
Где взять исходник DirectSound ?


3-74559
BorisUK
2002-12-04 08:54
2002.12.23
Сделать Hint на гриде


1-74693
bambina
2002-12-12 14:24
2002.12.23
TSaveDialog


3-74596
ev1972
2002-11-28 15:49
2002.12.23
Master-Detail в Halcyon


1-74722
AlexVit
2002-12-13 17:25
2002.12.23
Прога запускается как процесс и не дает окна