![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Установка фильтра (where ... and ...) [D5]
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