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

Сделать так, чтобы фильтрация была двух столбиков с двух разных edit и не одновременно

04.03.2018, 12:37. Показов 995. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть фильтрация, которая фильтрует определенный столбик в таблице, но только один. Нужно сделать так что бы фильтрация была двух столбиков с двух разных edit и не одновременно.
Вот так выглядит для одной фильтрации
Delphi
1
2
public
  ed: String;
Delphi
1
2
3
4
5
6
7
8
9
procedure TForm5.Edit1Change(Sender: TObject);
begin
  if Edit1.Text <> '' then begin
    ADOTable1.Filtered := False;
    ed := Edit1.Text;
    ADOTable1.Filtered := True
  end
  else ADOTable1.Filtered := False
end;
Delphi
1
2
3
4
5
6
7
8
9
procedure TForm5.ADOTable1FilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
var
  h: String;
  s: String;
begin
  s:= Copy(DataSet['ФИО клиента'], 1, Length(ed));
  Accept := s = ed;
end;
А вот попробовал для двух но работает как то криво, фильтрует только edit2
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
public
  ed: String;
  eh: String;
 
procedure TForm5.Edit1Change(Sender: TObject);
begin
  if Edit1.Text <> '' then begin
    ADOTable1.Filtered := False;
    ed := Edit1.Text;
    ADOTable1.Filtered := True
  end
  else ADOTable1.Filtered := False
end;
 
procedure TForm5.Edit2Change(Sender: TObject);
begin
  if Edit2.Text <> '' then begin
    ADOTable1.Filtered := False;
    eh := Edit2.Text;
    ADOTable1.Filtered := True
  end
  else ADOTable1.Filtered := False
end;
 
 
procedure TForm5.ADOTable1FilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
var
  h: String;
  s: String;
begin
  s:= Copy(DataSet['ФИО клиента'], 1, Length(ed));
  Accept := s = ed;
  h:= Copy(DataSet['ФИО риэлтора'], 1, Length(eh));
  Accept := h = eh;
end;
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.03.2018, 12:37
Ответы с готовыми решениями:

Расставить числа так, чтобы максимальная сумма двух соседних была наименьшей
написать прогу, которая расставляет числа так, чтобы максимальная сумма двух соседних чисел была наименьшей

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

Распределить камни в две кучи так, чтобы разность весов этих двух куч была минимальной
Ограничение времени: 1.0 секунды Ограничение памяти: 64 МБ У вас есть несколько камней известного веса w1, …, wn. Напишите...

15
5967 / 4543 / 1094
Регистрация: 29.08.2013
Сообщений: 28,155
Записей в блоге: 3
04.03.2018, 12:58
1. на какое событие стоит фильтр?
2. почему фильтр, почему не SQL?
0
0 / 0 / 0
Регистрация: 10.02.2018
Сообщений: 43
04.03.2018, 13:00  [ТС]
qwertehok, 1. не много не понял вопроса. Фильтрация происходит так. Есть DBgrid в который выведена таблица, в котором есть поле "ФИО клиента". в edit ввожу данные, показывает все подходящие записи по столбцу "ФИО клиента"
2. Не знаю sql (задание по курсовой)
0
5967 / 4543 / 1094
Регистрация: 29.08.2013
Сообщений: 28,155
Записей в блоге: 3
04.03.2018, 13:12
во первых оба фильтра надо переписать

Delphi
1
2
3
4
5
6
7
8
procedure TForm5.Edit2Change(Sender: TObject);
begin
  ADOTable1.Filtered := False;
  if Edit2.Text <> '' then begin
    eh := Edit2.Text;
    ADOTable1.Filtered := True
  end;
end;
во вторых в ADOTable1FilterRecord нужно использовать 1 условие
Delphi
1
2
3
s:= Copy(DataSet['ФИО клиента'], 1, Length(ed));
h:= Copy(DataSet['ФИО риэлтора'], 1, Length(eh));
  Accept := (h = eh) and  (s = ed);
в третьих лучше все таки использовать Query и SQL так как Table тянет весь набор к себе, представьте что будет если данных много
0
0 / 0 / 0
Регистрация: 10.02.2018
Сообщений: 43
04.03.2018, 13:15  [ТС]
qwertehok, все равно фильтрует только по последнему столбику "ФИО риэлтора". Оба edit фильтруют только по "ФИО риэлтора"
0
5967 / 4543 / 1094
Регистрация: 29.08.2013
Сообщений: 28,155
Записей в блоге: 3
04.03.2018, 13:17
исправленный код показывай
0
0 / 0 / 0
Регистрация: 10.02.2018
Сообщений: 43
04.03.2018, 13:18  [ТС]
qwertehok,
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
procedure TForm5.Edit1Change(Sender: TObject);
begin
  ADOTable1.Filtered := False;
  if Edit1.Text <> '' then begin
    eh := Edit1.Text;
    ADOTable1.Filtered := True
  end;
end;
 
procedure TForm5.Edit2Change(Sender: TObject);
begin
  ADOTable1.Filtered := False;
  if Edit2.Text <> '' then begin
    eh := Edit2.Text;
    ADOTable1.Filtered := True
  end;
end;
 
procedure TForm5.ADOTable1FilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
var
  h: String;
  s: String;
begin
  s:= Copy(DataSet['ФИО клиента'], 1, Length(ed));
  h:= Copy(DataSet['ФИО риэлтора'], 1, Length(eh));
  Accept := (s = ed) And (h = eh);
end;
0
5967 / 4543 / 1094
Регистрация: 29.08.2013
Сообщений: 28,155
Записей в блоге: 3
04.03.2018, 13:23
смотри, получается когда ты вводишь данные в Edit1, то тут
Цитата Сообщение от Crystaline Посмотреть сообщение
Accept := (s = ed) And (h = eh);
не выполнится условие (данных в Edit2 нет) и фильтр не отработает

когда ты ввел данные в оба эдита, только тогда будет TRUE и фильтр отработает

и если ты удалишь текст из Edit1, то из EH то он не удалится, потому что отработает условие
Delphi
1
 if Edit1.Text <> '' then begin
и в
Delphi
1
Accept := (s = ed) And (h = eh)
у тебя все равное что то останется

ИТОГ - меняй алгоритм фильтра
или используй SQL
0
0 / 0 / 0
Регистрация: 10.02.2018
Сообщений: 43
04.03.2018, 13:33  [ТС]
qwertehok, А можно как на кнопку вывести очистку фильтра?
0
5967 / 4543 / 1094
Регистрация: 29.08.2013
Сообщений: 28,155
Записей в блоге: 3
04.03.2018, 13:41
Цитата Сообщение от Crystaline Посмотреть сообщение
А можно как на кнопку вывести очистку фильтра?
не понял
ты спрашиваешь - можно или нет? или как это сделать?

просто перепиши фильтрафию

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
procedure TForm5.Edit1Change(Sender: TObject);
begin
  ADOTable1.Filtered := False;
  eh := Edit1.Text;
  if Edit1.Text <> '' then ADOTable1.Filtered := True
end;
 
procedure TForm5.ADOTable1FilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
var
  h: String;
  s: String;
begin
  s:= Copy(DataSet['ФИО клиента'], 1, Length(ed));
  h:= Copy(DataSet['ФИО риэлтора'], 1, Length(eh));
  if (eh = '') and (es <> '' ) then Accept := (s = ed);
  if (es = '') and (eh <> '' ) then Accept := (h = eh);
  if (es <> '') and (eh <> '' ) then Accept := (s = ed) And (h = eh);
end;
это конечно с коленки, думаю можно упростить
0
0 / 0 / 0
Регистрация: 10.02.2018
Сообщений: 43
04.03.2018, 13:44  [ТС]
qwertehok, а es откуда? Тоже прописать его в publick?
0
5967 / 4543 / 1094
Регистрация: 29.08.2013
Сообщений: 28,155
Записей в блоге: 3
04.03.2018, 13:46
да нет, это твоя вторая переменная - я ошибся
0
0 / 0 / 0
Регистрация: 10.02.2018
Сообщений: 43
04.03.2018, 14:09  [ТС]
qwertehok, Все заработало. Спасибо

Добавлено через 14 минут
qwertehok, а если для 3 фильтраций все тоже самое только + edit и переменная eg. Вот только так оно не фильтрует
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TForm6.ADOTable1FilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
var
  h: String;
  s: String;
  g: String;
begin
  s:= Copy(DataSet['ФИО клиента'], 1, Length(ed));
  h:= Copy(DataSet['ФИО риэлтора'], 1, Length(eh));
  g:= Copy(DataSet['Тип аренды'], 1, Length(eh));
  if (eh = '') and (ed <> '' ) and (eg <> '' ) then Accept := (s = ed);
  if (ed = '') and (eh <> '' ) and (eg <> '' ) then Accept := (h = eh);
  if (eg = '') and (ed <> '' ) and (eh <> '' ) then Accept := (g = eg);
  if (ed <> '') and (eh <> '' ) then Accept := (s = ed) And (h = eh) and (g = eg);
0
5967 / 4543 / 1094
Регистрация: 29.08.2013
Сообщений: 28,155
Записей в блоге: 3
04.03.2018, 14:27
Цитата Сообщение от Crystaline Посмотреть сообщение
а если для 3 фильтраций все тоже самое только + edit и переменная eg.
нет нет и еще раз нет

Цитата Сообщение от Crystaline Посмотреть сообщение
Вот только так оно не фильтрует
потому что ты не думаешь

используй SQL
0
0 / 0 / 0
Регистрация: 11.12.2017
Сообщений: 8
18.03.2018, 18:10
qwertehok, Вы не могли бы мне помочь, я создаю приложениедля использования БД в Delphi и возникли некоторые вопросы)
0
5967 / 4543 / 1094
Регистрация: 29.08.2013
Сообщений: 28,155
Записей в блоге: 3
18.03.2018, 21:28
Задавайте вопросы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.03.2018, 21:28
Помогаю со студенческими работами здесь

Образовать из двух упорядоченных последовательностей новую последовательность чисел так, чтобы она тоже была неубывающей
Даны две последовательности a1&lt;=a2&lt;=...&lt;=an и b1&lt;=b2&lt;=...&lt;=bm. Образовать из них новую последовательность чисел так, чтобы она тоже была...

Распределить камни в две кучи так, чтобы разность весов этих двух куч была минимальной
Ограничение времени: 1.0 секунды Ограничение памяти: 64 МБ У вас есть несколько камней известного веса w1, …, wn. Напишите...

Определить, можно ли в первых двух числах переставить цифры так, чтобы сумма конечных чисел была равна с
Даны 3 числа: a, b, c. Определить, можно ли в первых двух числах переставить цифры так, чтобы сумма конечных чисел была равна с. Например...

Сделать так, что бы на двух мониторах одновременно визуализировался сценарий определённого приложения
Дорогие друзья, столкнулся с очень нетривиальным вопросом, на который надеюсь найти здесь ответ! ситуация такова: к компу подключено 2...

Нужно сделать так чтоб с одной программы работать одновременно с двух компьютеров
всем привет помогите! мне нужно сделать так чтоб с одной программы работать одновременно с двух компьютеров


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
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, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru