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

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

15.12.2018, 18:55. Показов 2680. Ответов 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
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 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
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
16.12.2018, 00:11
Что характерно - в самом Access-е таки все работает, а вот в Filter - только один уровень. Либо все OR-ы, либо все AND-ы, объединять не получается.
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,361
Записей в блоге: 3
16.12.2018, 09:16
Masya87, а может - это намек свыше на то, что не надо в свое клиентское приложение тянуть ВЕСЬ набор данных, а потом извращаться с фильтрами? Почему не получать из всего этого Вашего добрища только те данные, которые нужны в данный конкретный момент и именно с ними работать? Это я Вам тонко на SQL-запросы намекаю...
0
16.12.2018, 09:21

Не по теме:

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

0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,361
Записей в блоге: 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
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,361
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru