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

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

Установка фильтра (where ... and ...) [D5]


Страницы:   1 2

mordsit ©   (2004-12-23 10:42:00) 

Мастера не могу понять.Использую Delphi5 и ODAC250D5 для работы с базой данных Oracle8i.Не могу поставить filter в сложном запросе(с обычным все ок select.. from.. where..).
Если запрос вида select ... from (select .. from where ..) table1,table2 where ..., то filter подставляется после первого where.Как с этим можно бороться?
Заранее благодарен.


mordsit   (2004-12-23 13:24:00) [1]

Древнее это точно.Спасибо за URL и за терпение. 8-).Попробую с новыми.Отпишу если заработает.


Sergey13   (2004-12-23 13:05:00) [2]

>да это в ODAK только(FilterSQL), именно он и переформировывает запрос
Если это так - то фигня, а не компоненты. Зачем его переформировывать, что бы снова получить то, что уже есть.

ODAC250D5 - это версия 2.5? Че-то древнее больно вроде. На http://www.crlab.com/odac/download.html5.10 для Д5 лежит.


mordsit   (2004-12-23 12:56:00) [3]

Sergey13 да это в ODAK только(FilterSQL), именно он и переформировывает запрос и открывает его заново.(переформировывает он его плохо с запросом что я привел выше)
ЮЮ да алиас не уместен в выражении:
   datasetname.filter:='t.id_dok=100';
   datasetname.filtered:=True;


ЮЮ   (2004-12-23 12:52:00) [4]

[19] каcается, конечно, обычного Filter


ЮЮ   (2004-12-23 12:49:00) [5]

а разве алиас таблицы здесь уместен? в датасете уже нет никаких 't.'


Sergey13   (2004-12-23 12:48:00) [6]

2[17] mordsit ©   (23.12.04 12:40)
А что за FilterSQL? Я с ОДАКом не работал, там что простого Filter нет? Ну или OnFilterRecord на худой конец? Что-то слабо верится в это.


mordsit   (2004-12-23 12:40:00) [7]

да.Извиняюсь.
DataSet.FilterSQL:='t.id_dok=100';
не работает.


Sergey13   (2004-12-23 12:13:00) [8]

2[15] mordsit ©   (23.12.04 12:07)
>я объяснил почему я не могу использовать ФИЛЬТР.
Где объяснил? В вопросе? Так там не объяснение, а непонимание вроде.
Т.е.  
datasetname.filter:='t.id_dok=100';
datasetname.filtered:=True;
не работает?


mordsit   (2004-12-23 12:07:00) [9]

Sergey13 я объяснил почему я не могу использовать ФИЛЬТР.


mordsit   (2004-12-23 11:47:00) [10]

ЮЮ - от (стандартного)фильтра придёться отказаться - это факт.
ЮЮ я не знаю запрос заранее.Придёться Анализировать SQL-запрос самому и подставлять условия самому,геморно конечно, но не вижу альтернативы.


Sergey13   (2004-12-23 11:44:00) [11]

2[11] mordsit ©   (23.12.04 11:31)
>Я уже и сам так думал делать.Но надеялся на фильтр
Ну так и делай фильтр . Нафига у сервера переспрашивать то, что у тебя уже естьна клиенте?


ЮЮ   (2004-12-23 11:37:00) [12]

>Но надеялся на фильтр, что он правильно разберёт запрос и подставит условие в правильное место(как это происходит без внутренних select-ов).

Значит перепиши фильтр :) А лучшьше не используй такой "фильтр", который на самом деле модифицирует запрос, а пиши нормальный параметрический запрос, учитывающий возможность "фильтрации", тогда и задача "универсальной кнопки" будет состоять в формировании этих параметров


mordsit   (2004-12-23 11:31:00) [13]

ЮЮ Ты прав.Я уже и сам так думал делать.Но надеялся на фильтр, что он правильно разберёт запрос и подставит условие в правильное место(как это происходит без внутренних select-ов).
 Если будут ещё какие предложение пишите.Всем спасибо за помощь.


ЮЮ   (2004-12-23 11:23:00) [14]

>Пытаюсь написать универсальную кнопку для любого SQL запроса.

так если твой код, то и подставляй правильно :)

Самый универсальный вариант
SELECT * FROM (<исходный запрос>) WHERE ...


Sergey13   (2004-12-23 11:14:00) [15]

and ta rif.id_doc
конечно. зрение подвело. 8-)


mordsit   (2004-12-23 11:13:00) [16]

Пытаюсь написать универсальную кнопку для любого SQL запроса.
Нажимаешь на кнопку и тебе накладывается фильтр на выделенное поле,значение в любом dbGride(не имеет значение что отображается в dbGride).Параметр конечно бы подошёл ,но для часного случая.


Sergey13   (2004-12-23 11:13:00) [17]

select t.id_dok,(t.sum_it+tarif.sum_v)
from schet_f_akt t,
(select tar.id_dok,sum(tar.sum_val) sum_v
 from ttn_tarif tar
 where tar.nds_proc<>10
 group by tar.id_dok) tarif
where t.dt_kt='1'
and tanf.id_doc=t.id_doc and t.id_doc=:id_doc
В проге присваиваешт :id_doc=100

Вроде так.


Соловьев   (2004-12-23 11:06:00) [18]

Накладываю фильтр на t.id_dok=100

а что мешает это делать через параметр????


Соловьев   (2004-12-23 11:06:00) [19]

select t.id_dok,(t.sum_it+tarif.sum_v)
from schet_f_akt t,
(select tar.id_dok,sum(tar.sum_val) sum_v
 from ttn_tarif tar
 where tar.nds_proc<>10
 group by tar.id_dok) tarif
where t.dt_kt='1'

Декартово произведение? а зачем?


mordsit   (2004-12-23 11:05:00) [20]

Накладываю фильтр на t.id_dok=100


Страницы:   1 2

Наверх

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