Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.86/14: Рейтинг темы: голосов - 14, средняя оценка - 4.86
0 / 0 / 2
Регистрация: 20.04.2012
Сообщений: 35

Динамическая фильтрация БД

21.04.2012, 19:03. Показов 2882. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Хочу реализовать у себя в программе динамическую фильтрацию и поиск в БД (что бы БД фильтровалась сразу же, по мере введения параметров фильтрации) . У меня есть обычная фильтрация:
C++
1
2
3
4
5
6
7
8
9
10
11
12
if (Edit1->Text=="Код"){
Edit1->Text=LabeledEdit1->Text+LabeledEdit2->Text+LabeledEdit3->Text;}
else {
Edit1->Text=LabeledEdit1->Text+LabeledEdit2->Text+"'"+LabeledEdit3->Text+"'";}
 
Form4->ADOTable1->Filtered=False;
Form4->ADOTable1->Filter= Edit1->Text;
Form4->ADOTable1->Filtered=True;
 
LabeledEdit1->Text="";
LabeledEdit2->Text="";
LabeledEdit3->Text="";
Знаю, для того что бы она стала динамической, её нужно повесить на событие OnChange, но нужно что-то добавить. Аналогично и с поиском. Может кто помочь? Заранее спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.04.2012, 19:03
Ответы с готовыми решениями:

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

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

Динамическая фильтрация списка CollectionViewSource
Не могу понять как использовать CollectionViewSource. Сделал по примерам с инета. При подключении коллекции - фильтрует. Но при изменении...

20
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
21.04.2012, 20:04
ИСпользуй запрос для фильтрации
0
0 / 0 / 2
Регистрация: 20.04.2012
Сообщений: 35
21.04.2012, 20:13  [ТС]
Цитата Сообщение от Sasha Посмотреть сообщение
ИСпользуй запрос для фильтрации
запрос на фильтрацию? ммм...не представляю каким образом..Расскажите, пожалуйста, поподробнее..
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
21.04.2012, 20:49
Я имел ввиду лучше использовать запрос, чем фильтрацию на поиск нужных строк
0
0 / 0 / 2
Регистрация: 20.04.2012
Сообщений: 35
21.04.2012, 20:57  [ТС]
Цитата Сообщение от Sasha Посмотреть сообщение
Я имел ввиду лучше использовать запрос, чем фильтрацию на поиск нужных строк
Возможно, но в данном случае мне нужна все таки динамичность поиска строк, может знаете, как ее реализовать?
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
21.04.2012, 21:58
Я не могу понять у тебя что тот код который приведён сверху не работает?
0
0 / 0 / 2
Регистрация: 20.04.2012
Сообщений: 35
21.04.2012, 22:29  [ТС]
Цитата Сообщение от Sasha Посмотреть сообщение
Я не могу понять у тебя что тот код который приведён сверху не работает?
Работает) Но фильтрация происходит по нажатию кнопки, а мне нужно, что бы это происходило динамически. Я пытаюсь узнать, как его усовершенствовать, чтобы достичь этого.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
21.04.2012, 23:17
НУ так в событие OnChange запихни
0
0 / 0 / 2
Регистрация: 20.04.2012
Сообщений: 35
21.04.2012, 23:25  [ТС]
Цитата Сообщение от Sasha Посмотреть сообщение
НУ так в событие OnChange запихни
В том-то и дело, если просто запихнуть, то записи отображает только после полного введения параметра, а мне нужно, что бы я ввел, к примеру букву "А", и вывело все записи, в которых в указанном параметре, значение начинается "А", ввел "Ав" - вывело все записи, в которых, в указанном параметре, значение начинается "Ав" и так далее. А так, значения показывает толлько после полного ввода слова "Автомобили".
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
22.04.2012, 00:16
Так как ты хочешь не получиться тебе нужно использовать запрос для фильтрации с оператором Like

Добавлено через 1 минуту
http://webmasterschool.ru/sql2/ch6.php
0
0 / 0 / 2
Регистрация: 20.04.2012
Сообщений: 35
22.04.2012, 00:51  [ТС]
Цитата Сообщение от Sasha Посмотреть сообщение
Так как ты хочешь не получиться тебе нужно использовать запрос для фильтрации с оператором Like
Попробывал, выдает какую-то ошибку по поводу AnsiString
Вот код:
C++
1
2
3
4
5
6
7
8
void __fastcall TForm4::LabeledEdit3Change(TObject *Sender)
{
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("SELECT (Код, Наименование, Вид, Марка, Топливо, МаксимальнаяСкорость) FROM Транспорт WHERE "+ LabeledEdit1->Text +" LIKE '"+ LabeledEdit3 +"%';");
ADOQuery1->ExecSQL();
ADOTable1->Active = true;
ADOTable1->Active = false;
ADOTable1->Active = true;
Ошибка: [C++ Error] Unit4.cpp(109): E2094 'operator+' not implemented in type 'AnsiString' for arguments of type 'TLabeledEdit *'
В чем может быть дело?
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
22.04.2012, 00:58
C++
1
2
3
4
   ADOQuery1->Close();
   ADOQuery1->SQL->Clear();
   ADOQuery1->SQL->Add("Select Код, Наименование, Вид, Марка, Топливо, МаксимальнаяСкорость from Glavnaya WHERE Код LIKE '"+LabeledEdit3->Text+"%'");
   ADOQuery1->Open();
0
0 / 0 / 2
Регистрация: 20.04.2012
Сообщений: 35
22.04.2012, 01:06  [ТС]
Что-то все равно - ноль реакции, ввожу значения в LabeledEdit - ничего не происходит
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
22.04.2012, 01:10
В какое событие писал?

Добавлено через 2 минуты
В событии фильтрации вверху над своим кодом напиши
C++
1
DataSource1->DataSet = ADOQuery1
0
0 / 0 / 2
Регистрация: 20.04.2012
Сообщений: 35
22.04.2012, 01:15  [ТС]
Цитата Сообщение от Sasha Посмотреть сообщение
В какое событие писал?
В событие OnChange объекта LabeledEdit3

Добавлено через 4 минуты
Цитата Сообщение от Sasha Посмотреть сообщение
В событии фильтрации вверху над своим кодом напиши
Код C++
1
DataSource1->DataSet = ADOQuery1
Добавил, в результате, получилось так:
C++
1
2
3
4
5
6
7
8
void __fastcall TForm4::LabeledEdit3Change(TObject *Sender)
{
DataSource1->DataSet = ADOQuery1;
ADOQuery1->Close();
   ADOQuery1->SQL->Clear();
   ADOQuery1->SQL->Add("Select Код, Наименование, Вид, Марка, Топливо, МаксимальнаяСкорость from Glavnaya WHERE Код LIKE '"+LabeledEdit3->Text+"%'");
   ADOQuery1->Open();
}
Но при вводе первого символа в LabeledEdit3 выдает ошибку и разве не нужен ADOQuery1->ExecSQL();?
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
23.04.2012, 11:17
Цитата Сообщение от Str. Посмотреть сообщение
и разве не нужен ADOQuery1->ExecSQL();?
Прочти вот это

Работа с методами Open и ExecSQL

Добавлено через 9 минут
Цитата Сообщение от Str. Посмотреть сообщение
Но при вводе первого символа в LabeledEdit3 выдает ошибку
Кстати только что посмотрел твою базу у тебя там поле Код имеет тип счётчик, так что не мудрено, что у тебя вылетает ошибка. По этому я тебе советую завести новое поле с типом числовое и туда самому заносить код, а старое поле оставь оно будет тебе автоматом инкреминировать строки.

Добавлено через 17 часов 31 минуту
Вот держи переделал немного
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
23.04.2012, 11:50
11111111111111111111
Вложения
Тип файла: zip for_forum.zip (8.90 Мб, 26 просмотров)
0
0 / 0 / 2
Регистрация: 20.04.2012
Сообщений: 35
23.04.2012, 14:27  [ТС]
Цитата Сообщение от Sasha Посмотреть сообщение
Вот держи переделал немного
Спасибо, это помогло разобраться)
0
480 / 393 / 113
Регистрация: 24.04.2012
Сообщений: 1,632
Записей в блоге: 3
24.04.2012, 09:10
записи отображает только после полного введения параметра
- значит плохо пробовал. Sasha был прав на счет like. И лучше добавить еще Timer чтоб при вводе в Edit фильтрация не происходила на каждую букву. И Sasha можешь пояснить почему лучше исп. запрос для фильтрации? На сколько мне известно фильтр действует на уже полученные данные запроса.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
24.04.2012, 09:50
Цитата Сообщение от Bit_Man Посмотреть сообщение
И лучше добавить еще Timer чтоб при вводе в Edit фильтрация не происходила на каждую букву
Таймер там не нужен



Цитата Сообщение от Bit_Man Посмотреть сообщение
И Sasha можешь пояснить почему лучше исп. запрос для фильтрации? На сколько мне известно фильтр действует на уже полученные данные запроса.
Прочти здесь

http://www.taurion.ru/access/4/2
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.04.2012, 09:50
Помогаю со студенческими работами здесь

Динамическая память
int set_arr(char* arr, int size, int pos, char* str) { if (pos <0 || size <= 0) { return 1; } str = (char*)malloc(N *...

Динамическая таблица
Ребят,дали такое задание: По заполненной экзаменационной ведомости (таблица: фамилия студента – оценка на экзамене) создать сводку...

Динамическая траектория
Здравствуйте! В общем создал "гравитацию" между двумя телами. Все работает идеально. С физикой проблем нет. Желтое тело (солнце)...

Динамическая компиляция
Решил перейти на delphi и тут же появился вопрос: "Осуществима ли динамическая компиляция кода на Delphi?". Поиск ответов не дал( ...

Динамическая линковка
Привет! Делаю лабу https://github.com/IpovsOperatingSystems/os_lab_2019/blob/master/lab2/text/lab2.md в этой теме описаны функции и как...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Функция установки текстового статуса в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru