Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
 Аватар для Masya87
0 / 0 / 0
Регистрация: 28.07.2015
Сообщений: 6
MS Access

Фильтрация из нескольких столбцов таблицы по нескольким условиям!

15.12.2018, 18:55. Показов 2733. Ответов 9

Студворк — интернет-сервис помощи студентам
Всех приветствую!

Имеется файл MS Access, в нем таблица с 10-ю столбцами. Обращение к таблице через ADOTable. Искомое значение вводим через Edit1. Первоначально стоит задача организовать фильтрацию по столбцам "3" "4" "5". Выборка происходит по принципу: искомое значение ищется в каждом из этих трех столбце. Данная задача без проблем решается:

C++
1
Form1->ADOTable1->Filter = "[3] like '" + Form1->Edit1->Text + "%'" + "OR [4] like '" + Form1->Edit1->Text + "%'" + "OR [5] like '" + Form1->Edit1->Text + "%'";
Но дальше есть необходимость к данной фильтрации применить еще одну: фильтрация по "8" столбцу значений из Edit2.

Т.е. на выходе я должен получить фильтр, в котором бы из первой фильтрации были бы выбраны значения удовлетворяющие условию второй фильтрации.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.12.2018, 18:55
Ответы с готовыми решениями:

Фильтрация datqagridView по нескольким параметрам, из нескольких столбцов
Здравствйте, собественно по названию понятен вопрос, есть таблица с 5 колноками и мне необходимо что бы производилась фильтрация по...

Фильтрация по нескольким условиям
Ребята, всем привет! У меня стоит следующая задача, в решении которой прошу вашей помощи! Необходимо сохдать фильтрацию по трем...

Фильтрация элементов списка по нескольким условиям
Здравствуйте. Это нужно, чтобы отфильтровать отображаемые элементы в списке по фильтрам над списком. В списке находятся объекты со...

9
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33411 / 21521 / 8236
Регистрация: 22.10.2011
Сообщений: 36,922
Записей в блоге: 12
15.12.2018, 19:08
А просто взять существующий фильтр в скобки и добавить к нему AND <еще одно условие> - не сработает? СУБД никаких нет на компьютере проверить не могу...

Как-нибудь вот так:
C++
1
Form1->ADOTable1->Filter = "(" + Form1->ADOTable1->Filter + ") AND ([8] like " + QuotedStr(Form1->Edit1->Text + "%") + ")";
0
 Аватар для Masya87
0 / 0 / 0
Регистрация: 28.07.2015
Сообщений: 6
15.12.2018, 19:34  [ТС]
Так выдаёт ошибку, ну и в принципе сомневаюсь что можно таким образом отфильтровать.

В целом есть понимание, что в данном запросе будет не просто указатель на предыдущий фильтр, а весь текст предыдущего фильтра и дополнительно новое условие. Как это оформить к сожалению не знаю.

Понятно, что надо как-то отделять данные условия скобками, но где и как их ставить не пойму, поробовал кучу вариантов, и всё безуспешно.
Миниатюры
Фильтрация из нескольких столбцов таблицы по нескольким условиям!  
0
 Аватар для TrollHammer
1216 / 709 / 336
Регистрация: 22.02.2018
Сообщений: 2,095
Записей в блоге: 2
15.12.2018, 22:58
volvo, Я пытался применить предикаты в фильтрах ADOTable - не работают
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33411 / 21521 / 8236
Регистрация: 22.10.2011
Сообщений: 36,922
Записей в блоге: 12
16.12.2018, 00:11
Что характерно - в самом Access-е таки все работает, а вот в Filter - только один уровень. Либо все OR-ы, либо все AND-ы, объединять не получается.
0
Модератор
 Аватар для D1973
9929 / 6467 / 2457
Регистрация: 21.01.2014
Сообщений: 27,423
Записей в блоге: 3
16.12.2018, 09:16
Masya87, а может - это намек свыше на то, что не надо в свое клиентское приложение тянуть ВЕСЬ набор данных, а потом извращаться с фильтрами? Почему не получать из всего этого Вашего добрища только те данные, которые нужны в данный конкретный момент и именно с ними работать? Это я Вам тонко на SQL-запросы намекаю...
0
16.12.2018, 09:21

Не по теме:

D1973, Полностью согласен, фильтры в ADOTable - еще то зло. Мне в наследство достался проект, используются для вывода в грид тэйблы с фильтрацией (заявки по годам и месяцам), тормозит это добро безбожно. А чтобы это реализовать по-человечески, нужно весь проект с нуля писать.

0
Модератор
 Аватар для D1973
9929 / 6467 / 2457
Регистрация: 21.01.2014
Сообщений: 27,423
Записей в блоге: 3
16.12.2018, 10:10

Не по теме:

TrollHammer, сочувствую, что еще сказать...


Вот почему и говорю ТС-у: пока дело далеко не зашло - бросайте это гиблое дело с использованием T...Table - это тупик!!!
0
 Аватар для Masya87
0 / 0 / 0
Регистрация: 28.07.2015
Сообщений: 6
16.12.2018, 17:36  [ТС]
Да мне в общем-то без разницы, можно и через SQL запросы всё сделать. Например быструю полную очистку этой же таблицы я так и делаю (в том смысле, что через SQL запрос), и я даже пробовал реализовать задуманное выше через них же, но к сожалению навыков и опыта на реализацию не хватило, а чётких готовых примеров не нашёл.

Способ быстрой очистки:
C++
1
2
3
4
5
ADOQuery1->Active=false;
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("delete from FileName");
ADOQuery1->ExecSQL();
ADOTable1->Active=false;
Куда тут вписывать понятно, а вот что вписывать - не совсем. В виду того, что данные у меня динамические (вводятся из Edit1 и Edit2), c кавычками и скобками получается полная неразбериха.
0
Модератор
 Аватар для D1973
9929 / 6467 / 2457
Регистрация: 21.01.2014
Сообщений: 27,423
Записей в блоге: 3
17.12.2018, 09:02
Цитата Сообщение от Masya87 Посмотреть сообщение
а вот что вписывать - не совсем
Ну мне тем более не понятно, т.к. я не вижу структуру таблицы и не знаю поставленной задачи...
Вот минимальный пример: из всех записей таблицы (скрин 1) отбираются только записи, где поля F, I или O содержат текст "ива", а поле City при этом содержит текст "ново"... Результат на втором скрине
C++
1
2
3
4
5
6
7
8
9
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   ADOQuery1->Close();
   ADOQuery1->SQL->Text = "SELECT * FROM Tab1 WHERE ((F Like :p1) or (I Like :p2) or (O Like :p3)) and (City Like :p4)";
   #define Q ADOQuery1->Parameters
   for(int i = 0; i < Q->Count; i++)
    Q->Items[i]->Value = String().sprintf(L"%%%s%%", i < Q->Count - 1 ? Edit1->Text : Edit2->Text);
   ADOQuery1->Open();
}
Миниатюры
Фильтрация из нескольких столбцов таблицы по нескольким условиям!   Фильтрация из нескольких столбцов таблицы по нескольким условиям!  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.12.2018, 09:02
Помогаю со студенческими работами здесь

Поиск данных из нескольких таблиц, по нескольким условиям
Здравствуйте уважаемые форумчане, столкнулся с проблемкой по выбору значения из таблицы... Дело в том, что задается более 2х условий и...

Фильтрация по нескольким значениям из нескольких CheckListBox
Есть таблица, заполнянемы по запросу SELECT * FROM ZAYAVKA; Есть несколько чеклистбоксов. По нажатию кнопки надо выбрать из...

Выборка из таблицы по нескольким условиям MS Excel
Уважаемые эксперты, подскажите пожалуйста как сделать в данном случае. Есть 4 критерия - 4 столбца данных, я их вырезал отдельно из...

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

выбор строк из таблицы, одновременно по нескольким условиям
здравствуйте. есть таблица(t1) с полями: дата(формат дата/время), id_s(числовое), название(текстовое) и др. на форме есть Edit и...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru