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

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

Delphi+SQL. Как добавить запрос к уже выполненому запросу [D7, IB6.x]


Страницы:   1 2 3 4

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))


Страницы:   1 2 3 4

Наверх

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