Форум: "Базы";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
ВнизУстановка фильтра (where ... and ...) Найти похожие ветки
← →
mordsit © (2004-12-23 10:42) [0]Мастера не могу понять.Использую Delphi5 и ODAC250D5 для работы с базой данных Oracle8i.Не могу поставить filter в сложном запросе(с обычным все ок select.. from.. where..).
Если запрос вида select ... from (select .. from where ..) table1,table2 where ..., то filter подставляется после первого where.Как с этим можно бороться?
Заранее благодарен.
← →
Johnmen © (2004-12-23 10:46) [1]Понятие "фильтр" не применимо к запросам.
И вообще, как-то всё мутно описано...
← →
Sergey13 © (2004-12-23 10:46) [2]Для начала, where - это не фильтр, а условие.
Может запрос все таки приведешь.
← →
mordsit © (2004-12-23 11:02) [3]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"
Если применить фильтр к этому SQL запросу, в отладке видно что он подставляется после первого where.
← →
mordsit © (2004-12-23 11:05) [4]Накладываю фильтр на t.id_dok=100
← →
Соловьев © (2004-12-23 11:06) [5]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"
Декартово произведение? а зачем?
← →
Соловьев © (2004-12-23 11:06) [6]Накладываю фильтр на t.id_dok=100
а что мешает это делать через параметр????
← →
Sergey13 © (2004-12-23 11:13) [7]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
Вроде так.
← →
mordsit © (2004-12-23 11:13) [8]Пытаюсь написать универсальную кнопку для любого SQL запроса.
Нажимаешь на кнопку и тебе накладывается фильтр на выделенное поле,значение в любом dbGride(не имеет значение что отображается в dbGride).Параметр конечно бы подошёл ,но для часного случая.
← →
Sergey13 © (2004-12-23 11:14) [9]and tarif.id_doc
конечно. зрение подвело. 8-)
← →
ЮЮ © (2004-12-23 11:23) [10]>Пытаюсь написать универсальную кнопку для любого SQL запроса.
так если твой код, то и подставляй правильно :)
Самый универсальный вариант
SELECT * FROM (<исходный запрос>) WHERE ...
← →
mordsit © (2004-12-23 11:31) [11]ЮЮ Ты прав.Я уже и сам так думал делать.Но надеялся на фильтр, что он правильно разберёт запрос и подставит условие в правильное место(как это происходит без внутренних select-ов).
Если будут ещё какие предложение пишите.Всем спасибо за помощь.
← →
ЮЮ © (2004-12-23 11:37) [12]>Но надеялся на фильтр, что он правильно разберёт запрос и подставит условие в правильное место(как это происходит без внутренних select-ов).
Значит перепиши фильтр :) А лучшьше не используй такой "фильтр", который на самом деле модифицирует запрос, а пиши нормальный параметрический запрос, учитывающий возможность "фильтрации", тогда и задача "универсальной кнопки" будет состоять в формировании этих параметров
← →
Sergey13 © (2004-12-23 11:44) [13]2[11] mordsit © (23.12.04 11:31)
>Я уже и сам так думал делать.Но надеялся на фильтр
Ну так и делай фильтр. Нафига у сервера переспрашивать то, что у тебя уже есть на клиенте?
← →
mordsit © (2004-12-23 11:47) [14]ЮЮ - от (стандартного)фильтра придёться отказаться - это факт.
ЮЮ я не знаю запрос заранее.Придёться Анализировать SQL-запрос самому и подставлять условия самому,геморно конечно, но не вижу альтернативы.
← →
mordsit © (2004-12-23 12:07) [15]Sergey13 я объяснил почему я не могу использовать ФИЛЬТР.
← →
Sergey13 © (2004-12-23 12:13) [16]2[15] mordsit © (23.12.04 12:07)
>я объяснил почему я не могу использовать ФИЛЬТР.
Где объяснил? В вопросе? Так там не объяснение, а непонимание вроде.
Т.е.
datasetname.filter:="t.id_dok=100";
datasetname.filtered:=True;
не работает?
← →
mordsit © (2004-12-23 12:40) [17]да.Извиняюсь.
DataSet.FilterSQL:="t.id_dok=100";
не работает.
← →
Sergey13 © (2004-12-23 12:48) [18]2[17] mordsit © (23.12.04 12:40)
А что за FilterSQL? Я с ОДАКом не работал, там что простого Filter нет? Ну или OnFilterRecord на худой конец? Что-то слабо верится в это.
← →
ЮЮ © (2004-12-23 12:49) [19]а разве алиас таблицы здесь уместен? в датасете уже нет никаких "t."
← →
ЮЮ © (2004-12-23 12:52) [20][19] каcается, конечно, обычного Filter
← →
mordsit © (2004-12-23 12:56) [21]Sergey13 да это в ODAK только(FilterSQL), именно он и переформировывает запрос и открывает его заново.(переформировывает он его плохо с запросом что я привел выше)
ЮЮ да алиас не уместен в выражении:
datasetname.filter:="t.id_dok=100";
datasetname.filtered:=True;
← →
Sergey13 © (2004-12-23 13:05) [22]>да это в ODAK только(FilterSQL), именно он и переформировывает запрос
Если это так - то фигня, а не компоненты. Зачем его переформировывать, что бы снова получить то, что уже есть.
ODAC250D5 - это версия 2.5? Че-то древнее больно вроде. На http://www.crlab.com/odac/download.html 5.10 для Д5 лежит.
← →
mordsit © (2004-12-23 13:24) [23]Древнее это точно.Спасибо за URL и за терпение. 8-).Попробую с новыми.Отпишу если заработает.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.042 c