Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
1 / 1 / 0
Регистрация: 08.11.2010
Сообщений: 61

Отсеивание данных

18.11.2012, 19:36. Показов 3130. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте всем! Помогите пожалуйста с такой проблемой: есть таблица (ADOTable) размещенная на форме с помощью DBGrid. Ее нужно отфильтровать последовательно сужая диапазон значений. То есть хочется так: клик по радиогруппе - таблица отфильтровалась, клик еще раз по радиогруппе - таблица отфильтровала оставшиеся после первой фильтрации данные и так далее. пробовал различные вариации фильтрации (в частности с оператором and) ничего не вышло, потому что при этом способе определяю кучу условий в одну строку, а таблица фильтруется только по первому клику, по второму уже нет... Может есть у кого какие мысли по этому поводу? Если есть поделитесь пожалуйста.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.11.2012, 19:36
Ответы с готовыми решениями:

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

Типизированный файл: сортировка, отсеивание и поиск
у меня задание работа с типизированным файлом сортировка отсеивание и поиск как это все делать и как создать типизированный файл? это все...

последовательное отсеивание данных фильтрами в dbgrid
Здравствуйте Имеется форма, в которой есть dbgrid и несколько фильтров. Фильтры закинуты в RadioGroup. Есть одна проблема: сначала...

30
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
18.11.2012, 20:12
Использовать для формирования составного условия фильтрации единственную радиогруппу - затея для истинных извращенцев.
0
1 / 1 / 0
Регистрация: 08.11.2010
Сообщений: 61
18.11.2012, 20:15  [ТС]
я бы тоже хотел сказать это в лицо преподавателю)

Добавлено через 1 минуту
при чем с радиогруппой как раз и не возникает проблем)
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
18.11.2012, 20:17
Цитата Сообщение от FroZko Посмотреть сообщение
при чем с радиогруппой как раз и не возникает проблем)
А чего тогда спрашиваешь, если "не возникает" ?
0
1 / 1 / 0
Регистрация: 08.11.2010
Сообщений: 61
18.11.2012, 20:19  [ТС]
проблема не в радиогруппе а в том как составить фильтр

Добавлено через 1 минуту
у меня по клику радиогруппы ставиться ADOTable1.Filtered:=True;
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
18.11.2012, 20:25
Цитата Сообщение от FroZko Посмотреть сообщение
проблема не в радиогруппе а в том как составить фильтр
фильтр составляют как обычно - ЛогВыражение1 [ЛогОператор1 ЛогВыражение2] [ЛогОператор3 ЛогВыражение2] ..[ЛогОператорN ЛогВыражениеN]

Как ты его забубенишь - с использованием радиогруппы или без оной - это уже не столь важно и не принципиально.

Добавлено через 1 минуту
Цитата Сообщение от FroZko Посмотреть сообщение
у меня по клику радиогруппы ставиться ADOTable1.Filtered:=True;
А надо
ADOTable1.Filtered:=False;
ADOTable1.Filter := .. новое условие фильтрации ..
ADOTable1.Filtered:=True;
0
1 / 1 / 0
Регистрация: 08.11.2010
Сообщений: 61
18.11.2012, 20:28  [ТС]
вот конкретно здесь и проблема. мне при следующем клике радиогруппы не нужно ADOTable1.Filtered:=False; Вот только я начинаю догадываться что это не реально. У меня смысл в том что бы программа фильтровала, фильтровала и т.д. что бы оставалось все меньше и меньше данных в таблице с каждым шагом.
0
 Аватар для stupidstudent
18 / 15 / 0
Регистрация: 25.10.2011
Сообщений: 241
18.11.2012, 20:34
FroZko,
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
   
...
 
// компоненты НЕ встроенные, меняй на стандартные.
 AdvEditSotr: TAdvEdit;
    procedure JvXPButton1Click(Sender: TObject);
    procedure JvXPButton6Click(Sender: TObject);
    procedure JvXPButton2Click(Sender: TObject);
    procedure JvXPButton7Click(Sender: TObject);
    procedure cxRadioSotrFamilClick(Sender: TObject);
    procedure cxRadioSotrNameClick(Sender: TObject);
    procedure cxRadioSotrOtchClick(Sender: TObject);
  private
    { Private declarations }
    filterStr: string;
  public
    { Public declarations }
  end;
 
var
  FormFilter: TFormFilter;
 
implementation
 
{$R *.dfm}
 
uses UnitAuth, UnitDM, UnitMain, UnitProfile, UnitSotrudniki, UUserSet,
  UnitVosst, UnitKlienty, UnitPostavshiki;
 
// ----------------------------сотрудники------------------------------------
 
procedure TFormFilter.cxRadioSotrFamilClick(Sender: TObject);
begin
  filterStr := 'Фамилия';
end;
 
procedure TFormFilter.cxRadioSotrNameClick(Sender: TObject);
begin
  filterStr := 'Имя';
end;
 
procedure TFormFilter.cxRadioSotrOtchClick(Sender: TObject);
begin
  filterStr := 'Отчество';
end;
 
procedure TFormFilter.JvXPButton1Click(Sender: TObject);
begin
  if AdvEditSotr.Text <> '' then
  begin
    with DM.CompQuery_sotrudniki do
    begin
      Filter := filterStr + ' = ' + QuotedStr(AdvEditSotr.Text);
      Filtered := true;
      if (RecordCount = 0) then
      begin
        ShowMessage('asd');
      end;
    end;
  end;
 
end;
...
?

Добавлено через 3 минуты
Цитата Сообщение от FroZko Посмотреть сообщение
Ее нужно отфильтровать последовательно сужая диапазон значений
хм. тогда тебе нужен не filter, а sql в adoquery
1
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
18.11.2012, 20:34
Цитата Сообщение от FroZko Посмотреть сообщение
я начинаю догадываться что это не реально
Как это "не реально" ?

Установил фильтр 'Имя'='Вася' - получил 10 записей.
Установил другой фильтр 'Имя'='Вася' и "Фамилия"="Пупкин" - получил 5 записей.
Установил третий фильтр 'Имя'='Вася' и "Фамилия"="Пупкин" и "Статус"="Школоло" - получил 2 записи.

Чем тебе не последовательное использование условий фильтрации ?
1
 Аватар для stupidstudent
18 / 15 / 0
Регистрация: 25.10.2011
Сообщений: 241
18.11.2012, 20:35
Цитата Сообщение от mss Посмотреть сообщение
ADOTable1.Filtered:=False;
ADOTable1.Filter := .. новое условие фильтрации ..
ADOTable1.Filtered:=True;
вот тут старый фильтр и затрется.
0
1 / 1 / 0
Регистрация: 08.11.2010
Сообщений: 61
18.11.2012, 20:38  [ТС]
stupidstudent, спасибо попробую проглотить Ваш вариант.

mss, очень хорошая мысль про последовательность, сейчас буду думать как старый фильтр прилепить к новому.
спасибо всем!
0
 Аватар для stupidstudent
18 / 15 / 0
Регистрация: 25.10.2011
Сообщений: 241
18.11.2012, 20:40
пробуй так
Delphi
1
2
3
4
5
6
7
8
with table do
begin
SQL.Clear;
SQL.Add('SELECT * FROM имя_таблицы WHERE имя=вася');
ExecuteSQL; // не помню точно.
Active := true;
Active := false;
end;
а потом просто пишешь тоже самое добавив в строку запроса AND фамилия=пупкин и т.д.

Добавлено через 1 минуту
Цитата Сообщение от mss Посмотреть сообщение
Установил фильтр 'Имя'='Вася' - получил 10 записей.
Установил другой фильтр 'Имя'='Вася' и "Фамилия"="Пупкин" - получил 5 записей.
Установил третий фильтр 'Имя'='Вася' и "Фамилия"="Пупкин" и "Статус"="Школоло" - получил 2 записи.
посути тоже самое, что и я предложил ))
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
18.11.2012, 20:41
Цитата Сообщение от stupidstudent Посмотреть сообщение
тут старый фильтр и затрется
А накой ляд он, старый, нужен, если теперь требуется получить от сервера набор данных уже по другим критериям отбора ?
0
1 / 1 / 0
Регистрация: 08.11.2010
Сообщений: 61
18.11.2012, 20:41  [ТС]
хм хорошая мысль, только проблема в том, что я заведомо не знаю ко какому критерию буду фильтровать (имя, фамилия, отчество). может быть и такое что сначала отчество, потом имя, а потом фамилия.
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
18.11.2012, 20:44
Цитата Сообщение от stupidstudent Посмотреть сообщение
посути тоже самое, что и я предложил
Да ничего подобного.
Ты вообще ерунду предложил, ибо автору по его же словам нужно по клику усложнить условия отбора, опираясь на ранее задававшиеся условия.
А у тебя каждый клик приводит к заданию какого-то одного из трех различных фиксированных условий.
0
1 / 1 / 0
Регистрация: 08.11.2010
Сообщений: 61
18.11.2012, 20:48  [ТС]
mss, ход мыслей очень подходит. а как это реализовать допустим в клик кнопки? может запихать 1-й фильтр в переменную, на следующем шаге сделать filter:=1-й фильтр+новый фильтр? и т.д.
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
18.11.2012, 20:48
Цитата Сообщение от FroZko Посмотреть сообщение
имя, фамилия, отчество). может быть и такое что сначала отчество, потом имя, а потом фамилия.
И какая разница ?
Что так что эдак - получишь в результате те же самые N записей.
Ты не путай кислое с зеленым - этот порядок влияет на сортировку записей в возвращаемом НД. а не на собственно отбираемые записи.
0
1 / 1 / 0
Регистрация: 08.11.2010
Сообщений: 61
18.11.2012, 20:50  [ТС]
тут Вы не много не правы. Если фильтровать таблицу из 200 допустим записей сначала по Ивановым, а потом по Александрам, то результат будет один, а если сначала фильтровать по Александрам, а потом по ивановым то результат уже другой будет.
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
18.11.2012, 20:53
Цитата Сообщение от FroZko Посмотреть сообщение
как это реализовать допустим в клик кнопки?
Клик кнопки инкрементирует некую глоб.переменную, являющуся индексом в какой-либо табличной структуре записей FltConds из двух полей: "имя поля", "значение поля"

кликнул кнопку, инкрементировал индекс i, в цикле пробежал по всем записям из FltConds от самой первой до i-ой, построил новый фильтр, отфильтровал по нему таблицу

вуаля.
0
1 / 1 / 0
Регистрация: 08.11.2010
Сообщений: 61
18.11.2012, 20:57  [ТС]
благодарю!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.11.2012, 20:57
Помогаю со студенческими работами здесь

Отсеивание массивов
Уже второй день я мучаюсь с программой, почти доделал. Осталось только сделать отсеивание массивов. import java.util.Scanner; import...

Отсеивание в элементе
Приветствую форумчане. Обращаюсь с просьбами о помощи. не могу понять как это можно реализовать. есть БД предположим студенты. в таблице ...

Отсеивание по группам
Добрый день, у меня или сложная задача или я туплю. Есть такая таблица. 1 A1 Y 1 A2 Y 1 A3 N 2 B1 N 2 B2 Y 3 C1...

Отсеивание по дате.
Подскажите пожалуйста что можно сделать. Имеется таблица с двумя полями (Фамилия, дата рождения) Нужно сделать запрос, который бы...

Программа на отсеивание 4х значных
Номер автомобиля 4-х значный. Делиться без остачи на 2,7,11. В номере есть одинаковые цифры и сумма цифр = 30. Узнать это число и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru