![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Фильтрация
Клара © (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]А как главную фильтровать знаешь? Подчиненную (хоть трижды) абсолютно так же.