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х таблиц, как сделать новый запрос, чтобы выбрать данные из уже выполненного отчета. Например есть база книг с кодами книг, автора и издательства. В начале выводиться все книги, затем пользователь выбирает автора, как вывести всех авторов не меняя самый первый запрос. И затем пользователь выбирает издательство, как не меняя те два запроса отсортировать таблицу???


Sergey13   (2006-03-06 12:52:00) [21]

Перед
if DBLookupComboBox1.Text<>'' then
попробуй вставить
DataModule2.BOOK.Prepare;

Зачем ты запрос в коде пишешь?


alk   (2006-03-06 12:43:00) [22]

Виталий Панасенко
а это куда вставлять или вообще что это?


alk   (2006-03-06 12:38:00) [23]

Sergey13
говорит что f_kod_avt не найден)))
     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 ((:f_kod_avt=0) or (:f_kod_avt=1 and avtors.kod_avtora=:kod_avt))');
     DataModule2.BOOK.SQL.Add('and ((:f_kod_izd=0) or (:f_kod_izd=1 and avtors.kod_avtora=:kod_izd))');
     if DBLookupComboBox1.Text<>'' then
       begin
         DataModule2.BOOK.Params.ParamByName('kod_avt').AsInteger := DBLookupComboBox1.KeyValue;
         DataModule2.BOOK.Params.ParamByName('f_kod_avt').AsInteger:=1;
       end
     else
       begin
         DataModule2.BOOK.Params.ParamByName('kod_avt').Clear;
         DataModule2.BOOK.Params.ParamByName('f_kod_avt').AsInteger:=0;
       end;

     if DBLookupComboBox2.Text<>'' then
       begin
         DataModule2.BOOK.Params.ParamByName('kod_izd').AsInteger := DBLookupComboBox2.KeyValue;
         DataModule2.BOOK.Params.ParamByName('f_kod_izd').AsInteger:=1;
       end
     else
       begin
         DataModule2.BOOK.Params.ParamByName('kod_izd').Clear;
         DataModule2.BOOK.Params.ParamByName('f_kod_izd').AsInteger:=0;
       end;
 DataModule2.BOOK.Open;


Виталий Панасенко   (2006-03-06 12:37:00) [24]

FIBPLus, если мне память не изменяет, сами перестраивают запрос вида PARAM=NUL в PARAM is NULL


Sergey13   (2006-03-06 12:29:00) [25]

Да. И присвоить параметры ессно.


alk   (2006-03-06 12:24:00) [26]

Sergey13
просто где раньше было  
((:kod_avt is null) or (avtors.kod_avtora=:kod_avt))')
сделать
((:F_kod_avt=0) or (:F_kod_avt=1 and avtors.kod_avtora=:kod_avt))


Sergey13   (2006-03-06 12:21:00) [27]

2[38] alk ©   (06.03.06 11:50)
Понял. ИБ так вроде совсем не пропускает. Надо вводить еще один параметр-флаг на каждое поле. Типа
....and ((:F_kod_avt=0) or (:F_kod_avt=1 and avtors.kod_avtora=:kod_avt))
где флаг :F_kod_avt присваивать в зависимости от пустоты условия 0 или 1


alk   (2006-03-06 12:10:00) [28]

ко мне так не чего и не пришло кинь пожалуйста еще вот на этот ящик
alk20@yandex.ru


alk   (2006-03-06 11:57:00) [29]

msguns
спасибо


msguns   (2006-03-06 11:55:00) [30]

>alk ©  
Отправил по почте проект похожего приложения, где поиск информации в библиотечной картотеке реализован полностью (кроме фильтров)


alk   (2006-03-06 11:50:00) [31]

я поменял и сделал в обоих случаях asinteger. И все равно не чего не измениось


alk   (2006-03-06 11:48:00) [32]

оба они типа integer


Sergey13   (2006-03-06 11:47:00) [33]

2[34] alk ©   (06.03.06 11:37)
Какого типа в БД поля 'kod_avt' и 'kod_izd'?
Почему ты в одном случае делаешь ('kod_avt'). asStringа в другом ('kod_izd'). Text?


vovnuke   (2006-03-06 11:45:00) [34]

тип параметра присвоить надо


alk   (2006-03-06 11:37:00) [35]

Sergey13
вот код, а везде это значит хоть выбирай один, хоть два параметра, хоть вообще не одного, один фиг эта ошибка.
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))');
     if DBLookupComboBox1.Text<>'' then DataModule2.BOOK.Params.ParamByName('kod_avt').asString := DBLookupComboBox1.KeyValue
     else DataModule2.BOOK.Params.ParamByName('kod_avt').Clear;
     if DBLookupComboBox2.Text<>'' then DataModule2.BOOK.Params.ParamByName('kod_izd').Text:=DBLookupComboBox2.KeyValue
     else DataModule2.BOOK.Params.ParamByName('kod_avt').Clear;
     DataModule2.BOOK.Open;


Sergey13   (2006-03-06 11:32:00) [36]

2[31] alk ©   (06.03.06 11:29)
>он теперь
Блин, ну каждый раз код просить надо?

>везде пишет data type unknown
Везде - это даже на стенах в туалете?


alk   (2006-03-06 11:29:00) [37]

ANB
это я давным давно знаю.


alk   (2006-03-06 11:29:00) [38]

Sergey13
он теперь везде пишет data type unknown


ANB   (2006-03-06 11:25:00) [39]


> alk ©   (06.03.06 11:21) [28]

Чтобы записать Null надо почистить параметр (clear), а чтобы записать число, надо использовать AsInteger; Все имхо.


Sergey13   (2006-03-06 11:23:00) [40]

2[26] alk ©   (06.03.06 11:13)
2[28] alk ©   (06.03.06 11:21)
А кому я писал [16] Sergey13 ©   (06.03.06 10:43)?


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

Наверх

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