![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Delphi+SQL. Как добавить запрос к уже выполненому запросу [D7, IB6.x]
alk © (2006-03-06 09:17:00)Есть заброс который выводит данные из 3х таблиц, как сделать новый запрос, чтобы выбрать данные из уже выполненного отчета. Например есть база книг с кодами книг, автора и издательства. В начале выводиться все книги, затем пользователь выбирает автора, как вывести всех авторов не меняя самый первый запрос. И затем пользователь выбирает издательство, как не меняя те два запроса отсортировать таблицу???
alk (2006-03-06 11:21:00) [41]вот что написанно в обработчике по нажатию кнопки(должен сортировать таблицу используя параметры выбранные пользователем)
DataModule2.BOOK.Close;
DataModule2.BOOK.SQL.Clear;
DataModule2.BOOK.SQL.Text:='select *';
DataModule2.BOOK.SQL.Add('from Book, avtors,izdatelstva,litra');
DataModule2.BOOK.SQL.Add('where book.kod_izdatelstva=izdatelstva.kod_izdatelstva and');
DataModule2.BOOK.SQL.Add('book.kod_tip_litra=litra.kod_tip_litra and book.kod_avtora=avtors.kod_avtora');
DataModule2.BOOK.SQL.Add('and ((:kod_avt is null) or (avtors.kod_avtora=:kod_avt))');
DataModule2.BOOK.SQL.Add('and ((:kod_izd is null) or (book.kod_izdatelstva=:kod_izd))');
DataModule2.BOOK.Params.ParamByName('kod_avt').Text:=DBLookupComboBox1.KeyValue;
DataModule2.BOOK.Params.ParamByName('kod_izd').Text:=DBLookupComboBox2.KeyValue;
DataModule2.BOOK.Open;
Sergey13 (2006-03-06 11:18:00) [42]2 [26] alk © (06.03.06 11:13)
Свой запрос приведи. Полностью, без купюр.
alk (2006-03-06 11:13:00) [43]Sergey13
написал я после запроса, один фиг не работает.
если не чего не выбираешь или выбираешь 1 параметр пишет из null в string,
а если два параметра то data type unknown
Sergey13 (2006-03-06 11:09:00) [44]2[22] alk © (06.03.06 11:00)
>тоесть в начале надо писать сам запрос, а затем присваивать значение параметрам???
Да запрос сначала, причем если ты воспользуешься моим советом, то лучше его написать в Дизайн-тайме (во время разработки).
2[24] alk © (06.03.06 11:07)
>))) ну так скажи по секрету)))
Это военная тайна. Могу сказать только F1. 8-)
alk (2006-03-06 11:07:00) [45]Плохишь
))) ну так скажи по секрету)))
Плохиш (2006-03-06 11:06:00) [46]
> alk © (06.03.06 10:59) [21]
> Плохиш
> а где можно прочитать про это свойство и этот метод???
Это военная тайна и её по секрету расказывают только начинающим.
alk (2006-03-06 11:00:00) [47]Sergey13
тоесть в начале надо писать сам запрос, а затем присваивать значение параметрам???
alk (2006-03-06 10:59:00) [48]Плохиш
а где можно прочитать про это свойство и этот метод???
ANB (2006-03-06 10:57:00) [49]
> alk © (06.03.06 10:47) [17]
Вообще то практически все компоненты - дейтасеты сами парсят запрос при его присваивании и заполняют параметры.
Исключение - DOA, но там вообще вместо параметров - переменные.
Плохиш (2006-03-06 10:56:00) [50]
> alk © (06.03.06 10:47) [17]
> а как тогда сделать, чтобы не добавлять. просто через саму
> среду разработки добавить параметры?
Для начала рекомендую почитать про свойство Prepared и метод Prepare.
Sergey13 (2006-03-06 10:56:00) [51]2[17] alk © (06.03.06 10:47)
>все отображаеться в dbgrid'е,
Это понятно.
>обработка идет через ibquery
Т.е. IBX. Тогда предпочтительнее использовать IBDataSet.
>просто через саму среду разработки добавить параметры
Написав запрос ты уже их задал. После только присваивать значения.
alk (2006-03-06 10:47:00) [52]Sergey13
все отображаеться в dbgrid'е, обработка идет через ibquery. а как тогда сделать, чтобы не добавлять. просто через саму среду разработки добавить параметры?
Sergey13 (2006-03-06 10:43:00) [53]2[13] alk © (06.03.06 10:23)
А зачем ты их добавляешь? Что за компоненты доступа?
if DBLookupComboBox1.Text<>'' theh
DataModule2.BOOK.Params.ParamByName('kod_avt').asString := DBLookupComboBox1.KeyValue
else
DataModule2.BOOK.Params.ParamByName('kod_avt').Clear;
alk (2006-03-06 10:37:00) [54]ANB, А как параметры надо присваивать тогда??? и чтобы ты мог посоветовать???
ANB (2006-03-06 10:35:00) [55]Имхо. В таких случаях лучше модифицировать текст запроса, т.к. запросы с OR могут поломать план исполнения.
ЗЫ. Какое то странное присвоение параметров, используемые компоненты текст запроса парсить не умеют ?
alk (2006-03-06 10:23:00) [56]ну или так присваиваються оба параметра)))
DataModule2.BOOK.Params.Add;
DataModule2.BOOK.Params.Items[0].Name:='kod_avt';
DataModule2.BOOK.Params.Items[0].Text:=DBLookupComboBox1.KeyValue;
DataModule2.BOOK.Params.Add;
DataModule2.BOOK.Params.Items[1].Name:='kod_izd';
DataModule2.BOOK.Params.Items[1].Text:=DBLookupComboBox2.KeyValue;
alk (2006-03-06 10:20:00) [57]DataModule2.BOOK.Params.Add;
DataModule2.BOOK.Params.Items[0].Name:='kod_avt';
DataModule2.BOOK.Params.Items[0].Text:=DBLookupComboBox1.KeyValue;
Sergey13 (2006-03-06 10:18:00) [58]2[10] alk © (06.03.06 10:16)
>при данном запросе если не чего не выбираешь
Код присвоения параметров покажи.
alk (2006-03-06 10:16:00) [59]при данном запросе если не чего не выбираешь пишет: could not convert variant of type(null) into type (string)
а если один параметр не задан(или даже оба заданы): dynamic SQL Error SQL error code=-804 Data type unknown
Sergey13 (2006-03-06 10:09:00) [60]
select *
from Book, avtors,izdatelstva,litra
where book.kod_izdatelstva=izdatelstva.kod_izdatelstva and book.kod_tip_litra=litra.kod_tip_litra and book.kod_avtora=avtors.kod_avtora
and ((:kod_avt is null) or (avtors.kod_avtora=:kod_avt))
and ((:kod_izd is null) or (book.kod_izdatelstva=:kod_izd))