Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.30;
Скачать: CL | DM;

Вниз

Установка фильтра (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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.027 c
1-1105961360
Кабан
2005-01-17 14:29
2005.01.30
Где взять иконки с палитры компонентов Delphi?


1-1105820591
akvilon
2005-01-15 23:23
2005.01.30
ScrollBar, размер каретки


1-1105777062
WowaF
2005-01-15 11:17
2005.01.30
Чтение строки из файла через Stream


1-1106064885
Рома
2005-01-18 19:14
2005.01.30
Office и Delphi


1-1105963397
Zloy
2005-01-17 15:03
2005.01.30
Как вызвать стандартный выбор каталога