Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.126 c
6-1100429655
Алексей
2004-11-14 13:54
2005.01.30
IID_IHTMLElementRender на Дельфи 6


14-1105606082
kaZaNoVa
2005-01-13 11:48
2005.01.30
RLINK32: Too many resources to handle. что делать?


14-1105436659
TUser
2005-01-11 12:44
2005.01.30
Размещение процедур


1-1105781773
user101
2005-01-15 12:36
2005.01.30
Pchar To String


14-1105429646
Sergey13
2005-01-11 10:47
2005.01.30
Новое платежное поручение. Есть у кого?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский