Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Фильтрация


Клара ©   (2007-05-18 10:59:00) 

Добрый день Мастера!
Не откажите в любезности.
Как отфильтровать подчиненную таблицу, причем дважды подчиненную.
Организации - Акции - Промоутеры
Фильтровать нужно последнюю.


Anatoly Podgoretsky   (2007-05-18 21:31:00) [1]

> Клара  (18.05.2007 11:59:07)  [7]

В этом и дело, связаную таблицу фильтровать нельзя, она уже отфильтрована по связи.
Разорви связь и фильтруй.


DrAndrey   (2007-05-18 14:59:00) [2]

кнопка фильтр по выделенному

procedure TForm_Setka.ToolBtn_FVydClick(Sender: TObject);
 var F: String;
begin
 try
   With (DBGEh_Setka.DataSource.DataSet As TADODataset) do
   begin
     F:= Filter;
     if F<> '' then F:= F +  ' AND ';
     F:= F + DBGEh_Setka.SelectedField.FieldName + '='''+  DBGEh_Setka.SelectedField.AsString +'''';
     Filter:= F; Filtered:= True;
     ToolBtn_FPrim.Down:= True; ToolBtn_FPrim.Enabled:= True; ToolBtn_FPrim.Tag:=1;
     ToolBtn_FPrim.Hint:='Отменить фильтр'; ToolBtn_FUd.Enabled:= True; StB.Panels[0].Text:= ' Фильтр включен';
   end;

 Except
   ToolBtn_FUd.Click;
   MessageBox(Application.Handle, PChar('По этому столбцу использование фильтра невозможно, фильтр удален!'),
     PChar('Ограничение программы'), MB_OK or MB_ICONEXCLAMATION or MB_TOPMOST);
 end;
end;

кнопка применить фильтр

procedure TForm_Setka.ToolBtn_FPrimClick(Sender: TObject);
begin
 if ToolBtn_FPrim.Tag= 0 then
 begin
   DBGEh_Setka.DataSource.DataSet.Filtered:= True; ToolBtn_FPrim.Tag:=1;
   ToolBtn_FPrim.Hint:='Отменить фильтр'; StB.Panels[0].Text:= ' Фильтр включен';
 end
 else begin
   DBGEh_Setka.DataSource.DataSet.Filtered:= False;  ToolBtn_FPrim.Tag:=0;
   ToolBtn_FPrim.Hint:='Применить фильтр'; StB.Panels[0].Text:= ' Фильтр отключен';
 end;
end;

кнопка удалить фильтр

procedure TForm_Setka.ToolBtn_FUdClick(Sender: TObject);
begin
 DBGEh_Setka.DataSource.DataSet.Filter:= ''; ToolBtn_FPrim.Down:= False; ToolBtn_FPrim.Enabled:= False;
 ToolBtn_FPrim.Tag:=0; ToolBtn_FPrim.Hint:='Фильтр недоступен'; ToolBtn_FUd.Enabled:= False;
 StB.Panels[0].Text:= '';
end;

Если DataSet для грида находится не на этой форме - после её закрытия не забудь убрать фильтр.

PS: Код примитивный, прошу не пинать :-)


Клара   (2007-05-18 14:40:00) [3]


> DrAndrey

Если можно Ваш код.


DrAndrey   (2007-05-18 12:58:00) [4]

Если все данные по которым предполагается фильтрация имеются в одной таблице, то ее подчиненность никакого значения не имеет.
Как вариант: использование фильтрации по выделенной ячейке (как в MS ACCESS), дешево и сердито. + Сортировка по клику заголовка столбца.
Если нужно дам код.


Клара   (2007-05-18 12:15:00) [5]

База реляционная, идентификатором для таб. Организации (kod_org), для Акции (kod_org,Kod_akc), для Промо_Акция(kod_org,Kod_akc,Id_prom,data_akcii), связаны в том же порядке.
Нужно фильтровать таблицу Промо по разным полям (например по району проживания 'rajon_provedenija', по дате и т.д.)


Клара   (2007-05-18 11:59:00) [6]

Да я тебе и без справки скажу, что нужно включать связуемые поля в строку фильтра, ну и этот вариант я испробывала. Фильтрация работает только без зависимости от других таблиц. А то я не читаю и надеюсь только на подсказку, чёрт.
Ты сам попробуй, а то как с запросами пол дня расказывал, как делать, а когда попытался сделать понял...


DrAndrey   (2007-05-18 11:59:00) [7]

>Form22.ADOTable3.Filter:='rajon_provedenija='''+Edit2.Text+'''';
>Form22.ADOTable3.Filtered:=true;

А база то реляционная или как? Где идентификаторы?


Sergey13   (2007-05-18 11:46:00) [8]

> [4] Клара   (18.05.07 11:41)

Нет, смысл этого форума (как я его понимаю) помочь понять свои ошибки. А код давать бесполезно. Сама же пишешь "Я как то делала, но очень давно." Т.е. забыла. А если бы поняла, тогда давно, то проблем бы сейчас не возникло.
Кроме того ответы на вопросы не отменяют работу со справкой и литературой по теме.


Плохиш   (2007-05-18 11:44:00) [9]


> Смысл вашего форума потрепаться в "Прочее".

Мазахисты какие-то, всё приходят и приходят... Есть же много других "добрых" форумов.


Клара   (2007-05-18 11:41:00) [10]


> Sergey13

Помог!!!
Вы знаете что меня убивает, каждый раз Вы упорно показываете свое превосходство, а затем может последовать, а может и не последовать ответ.
Я и так знаю, что Вы лучше, дальше что... Ну попрыгайте полегчает.
Да не отвечайте. Смысл вашего форума потрепаться в "Прочее".


Sergey13   (2007-05-18 11:32:00) [11]

> [2] Клара   (18.05.07 11:09)
> Form22.ADOTable3

Чума!!! Какое разнообразие имен! 8-)

Ну так то же самое сделай с третьей таблицей.

А по смыслу тебе наверное надо настроить мастер-детальное соединение датасетов. И никакая фильтрация не потребуется.


Клара   (2007-05-18 11:09:00) [12]

Ну примерно вот так и это работает без подчинения.

Form22.ADOTable3.Filter:='rajon_provedenija='''+Edit2.Text+'''';
Form22.ADOTable3.Filtered:=true;
Я как то делала, но очень давно. Вот пытаюсь, нужно быстро вот к Вам и обратилась.


Sergey13   (2007-05-18 11:04:00) [13]

А как главную фильтровать знаешь? Подчиненную (хоть трижды) абсолютно так же.


Наверх

Титульная страница Поиск, карта сайта Написать письмо