27.01.2003, 15:17 | #1 |
Модератор
|
Свой диалог фильтра
Кто-нибудь перекрывал диалог стандартного фильтра?
Что мне надо: по "фильтрации записей" (Ctrl+F3) вывалить собственный диалог, так как связанных таблиц много и "расширенный" фильтр ну никак не устраивает. Смотрел filter для datasource, для грида, для полей в гриде, ставил брэкпойнты - не попадаю в них никак Отдельную кнопку для фильтра лепить тоже некрасиво. Оно в принципе реализуется или нет? |
|
27.01.2003, 15:25 | #2 |
----------------
|
Варианты
Можно перекрыть task() на форме
Можно поставить breakpoin в init() формы sysQueryForm и уже там смотреть, что нравится |
|
31.01.2003, 14:57 | #3 |
Модератор
|
task() перекрыл. Заработало, но теперь не перерисовываются кнопки "Фильтрация записей" и "Удалить фильтр". Кто за них отвечает, так и не понял.
раньше работало ds = T1_ds.query().datasourceno(1); br = ds.addRange(fieldnum(Implementations, ClientId)); br.value(queryvalue("Вася")); T1_ds.research(); но после того как для datasource перекрыл executeQuery() как select * from T1 join T2 where () join T3 where () и т.д. - кнопки перерисывываться перестали. Шаманство, одним словом |
|
31.01.2003, 15:14 | #4 |
----------------
|
Не понятно, но здорово
За кнопочки отвечает активный DS формы. Если в его запросе [queryRun().query()] есть ограничения [ranges], то соответственно меняются кнопочки. А если не меняются, значит что-то сделали не так... и никаких чудес. |
|
31.01.2003, 17:51 | #5 |
Модератор
|
Вот такой у меня executeQuery
select * from Implementations where (Implementations.ProviderID==filter.ProviderId() || filter.ProviderId()=="") && (Implementations.ClientID==filter.ClientId() || filter.ClientId()=="") && (Implementations.InfSystemID==filter.InfSystemId() || filter.InfSystemId()=="") && (Implementations.StageID==filter.StageId() || filter.StageId()=="") exists join is where Implementations.InfSystemID==is.SystemID && is.SystemTypeID==filter.infSystemTypeId() || filter.infSystemTypeId()=="" exists join is2 where Implementations.InfSystemID==is2.SystemID && is2.VendorID==filter.VendorId() || filter.VendorId()=="" exists join iss where Implementations.InfSystemID==iss.InfSystemID && iss.AutomationSubjectID==filter.InfSystemSubjectId() || filter.InfSystemSubjectId()=="" exists join im where Implementations.ImplementationID==im.ImplementationID && im.ModuleID==filter.ModuleId() || filter.ModuleId()=="" exists join ias where Implementations.ImplementationID==ias.ImplementationID && ias.AutomationSubjectID==filter.ImplementationSubjectId() || filter.ImplementationSubjectId()=="" exists join ca where Implementations.ClientID==ca.FirmID && filter.ClientActivityId()==ca.ActivityId || filter.ClientActivityId()=="" exists join pa where Implementations.ProviderID==pa.FirmID && filter.ProviderActivityId()==pa.ActivityId || filter.ProviderActivityId()=="" Выходит, что никаких ranges[] как бы и нет, хотя они в where очень даже подразумеваются. Мне это нравится тем, что уходит на сервер одним запросом, одно плохо - кнопка фильтра не отрисовывается. Мне бы сюда какой-нибудь фиктивный фильтр прикрутить - и было бы щастье |
|
31.01.2003, 18:09 | #6 |
----------------
|
Если бы удалось всё это выразить через QBE, тогда и кнопочки бы работали.
А так DS.queryRun().query() не меняется... хотя работал бы он с таким кол-вом exist join неизвестно. |
|
31.01.2003, 18:22 | #7 |
Модератор
|
Цитата:
А так DS.queryRun().query() не меняется... хотя работал бы он с таким кол-вом exist join неизвестно.
Плющит, а косить надо (с) - вот и извращаюсь |
|
31.01.2003, 19:20 | #8 |
Модератор
|
public void executeQuery()
{ querybuilddatasource dca; querybuildrange brca; querybuilddatasource dpa; querybuildrange brpa; ; q = new query(); ds = q.addDataSource(tablenum(Implementations)); if (filter.ClientActivityId()) { dca = ds.addDataSource(tablenum(Firm2Activities)); dca.addlink(fieldnum(Implementations, ClientId), fieldnum(Firm2Activities, FirmId)); dca.joinMode(JOINMODE::INNERJOIN); brca = dca.addRange(fieldnum(Firm2Activities, ActivityId)); brca.value(filter.ClientActivityId()); } if (filter.ProviderActivityId()) { dpa = ds.addDataSource(tablenum(Firm2Activities)); dpa.addlink(fieldnum(Implementations, ProviderId), fieldnum(Firm2Activities, FirmId)); dpa.joinMode(JOINMODE::INNERJOIN); brpa = dpa.addRange(fieldnum(Firm2Activities, ActivityId)); brpa.value(filter.ProviderActivityId()); } this.query(q); super(); } Что-то я к вечеру вообще перестаю что-либо понимать. Есть два фильтра - по ClientActivityId и ProviderActivityId. Вместе они выдают БОЛЬШЕ строк, чем по отдельности, что как-то не вяжется с традиционным пониманием inner join-ов. Сразу оговорюсь - на Firm2Activities уникальный ключ по (FirmId, ActivityId) Не могу понять (с) |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|