Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.92/26: Рейтинг темы: голосов - 26, средняя оценка - 4.92
4 / 4 / 0
Регистрация: 22.12.2011
Сообщений: 29
1

ADOTable1FilterRecord, постепенная фильтрация при наборе данных

21.02.2012, 12:07. Показов 4968. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть обработчик на onFilterRecord

Delphi
1
2
3
4
if RadioButton7.Checked
then Accept := DataSet.FieldByName('Org').Text = Edit1.Text;
if RadioButton10.Checked
then Accept := DataSet.FieldByName('Dolg').Text >= Edit1.Text;
и onChange

Delphi
1
2
ADOtable1.Filtered:=false;
ADOtable1.Filtered:=true;
как сделать так чтоб в Edit.Text постепенно отфильтровывались данные после каждого введенного символа
'Org' - текстовое поле
'Dolg' - вычисляемое поле
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.02.2012, 12:07
Ответы с готовыми решениями:

Фильтрация записей в наборе данных
Рябят помогите можно ли вообще такое сделать есть фильтр по текстовому полю Edit вот код ...

Фильтрация данных, ошибка при фильтрации числового поля
База в IBExpert. Поле house тип данных char. При фильтрации выдает ошибку procedure...

Изменение цвета поля Input при наборе текста (именно при наборе,а не при установке курсора мышки в поле Input)
Добрый день всем! Подскажите пожалуйста код, позволяющий сделать следующие действия. Есть поле...

Постепенная подгрузка товаров при прокрутке страницы
Всем привет! У меня такой вопрос. Вывожу товары на странице, а как сделать чтобы выводилось к...

22
474 / 337 / 36
Регистрация: 31.05.2011
Сообщений: 1,162
21.02.2012, 12:21 2
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.Edit1Change(Sender: TObject);
begin
  if Length(Edit1.Text) <> 0 then
    begin
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add('SELECT * FROM db WHERE [ID] LIKE' + QuotedStr(Edit1.Text + '%'));
      ADOQuery1.Active := True;
    end
  else
    begin
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add('SELECT * FROM db WHERE [ID]');
      ADOQuery1.Active := True;
    end;
end;
0
1496 / 1238 / 244
Регистрация: 04.04.2011
Сообщений: 4,362
21.02.2012, 13:49 3
Ну у Вас же вроде все верно написано в топике, не работает ?
Тогда проведите полный код обработчиков событий.

Или сделайте как советует БогДелфей, вместо фильтрации используя запрос по условию Правда, заменив приведенную им околесицу на адекватный код
0
474 / 337 / 36
Регистрация: 31.05.2011
Сообщений: 1,162
21.02.2012, 15:30 4
ну ппц, абасрал мой мега код, печалька
хоть бы исправил на адыкватный код
0
4 / 4 / 0
Регистрация: 22.12.2011
Сообщений: 29
21.02.2012, 15:53  [ТС] 5
ADOQuery я вообще не использую поэтому не могу прописать предложенный мне код
а мой код не работает так как хотелось бы, он фильтрует только конечный результат т.е.
при вводе слова выдает нужное значение только когда нужное слово встречается в таблице
хотелось бы что то типа

Код
                     М:             Ма:           Маш:
                   машина         машина         машина
                   марка           марка
                     миг
0
474 / 337 / 36
Регистрация: 31.05.2011
Сообщений: 1,162
21.02.2012, 16:55 6
што мешает викинуть адотейбл к чертям сабачим и вместо него использовать адоквери?
0
1496 / 1238 / 244
Регистрация: 04.04.2011
Сообщений: 4,362
21.02.2012, 22:00 7
Delphi
1
ADOQuery я вообще не использую
Коран не позволяет ?
0
71 / 71 / 7
Регистрация: 19.07.2011
Сообщений: 357
21.02.2012, 22:56 8
Bogdelphey! Какая разница, квери или табла, зачем лишний раз гонять запросы к базе, если можно сразу на полном клиентском датасете фильтровать базар? Тем более, что чел сразу приносит на клиента всю таблицу

Delphi
1
2
3
4
5
6
 With ADOQuery/ADOTable do
   begin
    Filtered:=False;
    Filter:='Org like '+ QuotedStr(myOrg)+’%’;  
    Filtered:=True;
   end;
Надо полагать у чела радиогруппа и там два батона:

Delphi
1
2
3
4
if RadioButton7.Checked
then Accept := DataSet.FieldByName('Org').Text = Edit1.Text;
if RadioButton10.Checked
then Accept := DataSet.FieldByName('Dolg').Text >= Edit1.Text;
А если попробовать так повесить на OnChange окна ввода подстроки?

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 With GroupBox1 do begin
    If trim(edFind.Text) <> '' then
     begin
       If rbOrg.Checked then
        dsEmployees.DataSet.Filter := 'Organizacia LIKE '+QuotedStr('%'+trim(edFind.Text)+'%');
       If rbDolznost.Checked then
        dsEmployees.DataSet.Filter := 'Dolznost LIKE '+QuotedStr('%'+trim(edFind.Text)+'%');
        with dsEmployees.DataSet do
         begin
          Filtered := False;
          if trim(edFind.Text) <> '' then
          Filtered := True;
         end;
    end
    else
       dsEmployees.DataSet.Filtered := False;
   End;
1
1496 / 1238 / 244
Регистрация: 04.04.2011
Сообщений: 4,362
22.02.2012, 01:34 9
Delphi
1
Какая разница, квери или табла, зачем лишний раз гонять запросы к базе, если можно сразу на полном клиентском датасете фильтровать базар?
У Вас странные понятия о работе с базами Незабвенный Клиппер стучит в сердце ?

Delphi
1
Тем более, что чел сразу приносит на клиента всю таблицу
Простой вопрос - ЗАЧЕМ ? Особенно если в таблице 100000 записей. Такое ощущение после Ваших слов, что Вы с объемами более нескольких сотен записей просто не работали
Кроме того, на клиенте в редких случаях требуется отображение только одной физ.таблицы, - а "правильных", 3НФ (а бывает и много более, поверьте !) базах, для показа пользователю читабельных данных требуется тянуть информацию из нескольких (а бывает десятков и даже более сотни !) физических таблиц сразу

Но главное - это подход. А он у ТС и Вас - табличный, т.е. локальный. А это уже древность, причем не антиквариат, а ветхая износившаяся рухлядь.

Добавлено через 8 минут
И, кстати, приведенный Вами код просто безобразный - в последнем фрагменте при каждом (!) нажатии на клавишу выполняется фильтрация, даже если в эдите пусто (в этом случае вообще будет класс - моргнет что-то, а потом опять все вывалит)

Представляю как будет "радоваться" несчастный юзер при работе с таким чудовищем, особенно когда в таблице будет тыч ндцать записей - он просто забодается ждать когда монитор отморгается. Особенно если надо ввести сразу несколько символов в маску (например вывести всех Квитков - Основьяненков
0
71 / 71 / 7
Регистрация: 19.07.2011
Сообщений: 357
22.02.2012, 03:07 10
Не надо обобщать бездумно.
Трудно представить себе компанию из 100 тыс сотрудников.
Если и да, то программеры, работающие в ТАКИХ компаниях, НЕ ЗАДАЮТ ТАКИЕ вопросы.

С точки зрения нагрузки на сеть, даже в самой мухозадерищенской провинции, лучше все делать на клиенте, сейчас машины мощные, пусть железный ящик отрабатывает бабки.

Внимательно читаем пост автора, ну юзает он ТАБЛИЦУ, а не квери всякие. Ну и пусть юзает - делает что знает, если помочь - то лучше разговаривать на его языке. Потом вырастет - начнет развиваться.
А так зачем наезжать на чела технологиями инопланетных тарелок, он просто не поймет.

Не вижу ничего плохого в динамическом применении простого фильтра против таблицы.

Не вижу никакого мигания.
Вложения
Тип файла: zip ProstoFilter.zip (22.5 Кб, 43 просмотров)
1
569 / 292 / 12
Регистрация: 28.01.2011
Сообщений: 1,326
22.02.2012, 06:32 11
Цитата Сообщение от zremas Посмотреть сообщение
лучше все делать на клиенте
Полная дурость. Вы знаете такое понятие как распределение нагрузки?
И что часть функционала можно и необходимо отдавать на сторону сервера.
А не городить кучу кода на клиенте.
Как преимущества можно привести как минимум, то что при необходимости можно спокойно поменять функционал на БД и не перекомпиливать екзешник и не заниматься его размножением на машины клиентов.
Еще это дает определенную гибкость программному продукту.
А если еще и отойти от закрытости исполняемого файла в сторону веб или java. То возможности вообще становятся неограниченными.
А то что у клиента супер-пупер машина, то это не повол лепить все на клиенте.
Знаете есть такие технологии как терминальный доступ. Как тонкие клиенты. В принципе когда у клиента стоит лишь монитор, клава и мышь.
А еще есть неттопы. Ибо незачем ставить бухгалтеру i5 и 4 гига. Он не траекторию полета шатла считает, а играть в кол оф дьюти он будет дома.
Цитата Сообщение от zremas Посмотреть сообщение
пусть железный ящик отрабатывает бабки
Еще одно дурное утверждение. Ибо законы экономики зачем платить больше если можно экономить. Я если вы поможете своему начальству сохранить лишнюю копейку оно вам только спасибо скажет.
0
71 / 71 / 7
Регистрация: 19.07.2011
Сообщений: 357
22.02.2012, 08:20 12
rdama - ахы! и пусть сервер на каждый чих юзера (вводимый в edit символ в подстроке фильтра) выполняет сложный запрос с множеством джойнов к историческим таблицам... а другие юзеры постоят в сторонке.
0
569 / 292 / 12
Регистрация: 28.01.2011
Сообщений: 1,326
22.02.2012, 08:41 13
zremas, читаем еще раз
Цитата Сообщение от rdama Посмотреть сообщение
распределение нагрузки
Это абсолютно не значит что надо
Цитата Сообщение от zremas Посмотреть сообщение
каждый чих юзера
оборачивать на сервере.
Все должно быть в разумных рамках. Не надо перегибов ни в одну ни в другую сторону.
Ну а
Цитата Сообщение от zremas Посмотреть сообщение
а другие юзеры постоят в сторонке.
ну не каждый из нас каждый день пишет высоко нагруженную систему с обработкой в реальном времени.
Для такого рода систем и требования иные и в частности к железу.
0
71 / 71 / 7
Регистрация: 19.07.2011
Сообщений: 357
22.02.2012, 10:06 14
rdama, как прописать запрос на ADOTable? !!!
0
569 / 292 / 12
Регистрация: 28.01.2011
Сообщений: 1,326
22.02.2012, 10:10 15
Цитата Сообщение от zremas Посмотреть сообщение
как прописать запрос на ADOTable?
Заменить на ADODataSet. И прописать запрос.
И к сведению если вы посмотрите в мониторе, то при открытии ADOTable(да и вообще Table) на сервер уходит запрос вида
SQL
1
SELECT * FROM tablename
Добавлено через 15 секунд
Цитата Сообщение от zremas Посмотреть сообщение
как прописать запрос на ADOTable?
Заменить на ADODataSet. И прописать запрос.
И к сведению если вы посмотрите в мониторе, то при открытии ADOTable(да и вообще Table) на сервер уходит запрос вида
SQL
1
SELECT * FROM tablename
0
71 / 71 / 7
Регистрация: 19.07.2011
Сообщений: 357
22.02.2012, 10:18 16
лучшеее - враг хорошего, чел же написал - ну юзает он ADOTable...вот и пусть попробует так как в примере. Может, этого за глаза хватит!
(я ж ничего против ADODataSet не имею)
0
569 / 292 / 12
Регистрация: 28.01.2011
Сообщений: 1,326
22.02.2012, 10:56 17
Да я ж по факту, то не против. Каждый ... кто ка хочет, кто в сухую, а кто смочит.
Вопрос в том, что можно человеку посоветовать и направить в правильном направлении. Нежели он как фрукт сам дозреет. Так сказать ускорить процесс обучения, путем отсечения не нужного.
0
1496 / 1238 / 244
Регистрация: 04.04.2011
Сообщений: 4,362
22.02.2012, 11:18 18
Delphi
1
как прописать запрос на ADOTable? !!!
Да поймите Вы наконец, что в ADO НЕТ ТАБЛИЦ ВООБЩЕ ! Оно полностью работает на запросах. И TADOTable, написанный для таких, как Вы, любителей старины (но чаще людей творчески ограниченных, с трудом или вообще не поддающихся переобучению), лишь имитирует работу с "таблицей", фактически "обрезая" возможности наборов данных на клиенте. Один из классических примеров "обрезки" - жесткое ограничение колонок в рамках единой физ.таблицы. Иными словами - TTable умеет работать только с колонками одной физ.таблицы и все ! В то время как TADODataSet помимо работы с единственной таблицей умеет работать с данными, полученными в результате выполненения произвольного запроса.
Как говорится, почувствуйте разницу !
Но у TADOTable есть одно маленькое, но очень вкусное для некоторых "программистов" качество - он позволяет обойтись вообще без SQL. Вот этот-то лакомый кусочек и манит на тэйбл, как мух на г..., многочисленных ламеров-прогеров и стародристов-клипперистов, так и не продвинувших свой скил ни на шаг с конца 90-х Для них, "ховающихся в жито", от одного звука "эк-кю-эль", TADOTable воистину панацея, позволяющая работать с современными серверами прадедовскими плоскогубцами
0
4 / 4 / 0
Регистрация: 22.12.2011
Сообщений: 29
22.02.2012, 16:29  [ТС] 19
Цитата Сообщение от MsGuns Посмотреть сообщение
Но у TADOTable есть одно маленькое, но очень вкусное для некоторых "программистов" качество - он позволяет обойтись вообще без SQL. Вот этот-то лакомый кусочек и манит на тэйбл, как мух на г..., многочисленных ламеров-прогеров и стародристов-клипперистов, так и не продвинувших свой скил ни на шаг с конца 90-х Для них, "ховающихся в жито", от одного звука "эк-кю-эль", TADOTable воистину панацея, позволяющая работать с современными серверами прадедовскими плоскогубцами
Есть один нюанс. Вот учился я на программиста, учили меня старыми дедовскими способами, но работаю я Web-дизайнером ( т.к. в свое время сделал уклон на html, php, java...) и в свободное время ретуширую свадебные фото. И вот в один прекрасный момент меня попросили написать БД на работе для учета клиентов, договоров и оборудования. Не вижу смысла начинать доучивать что то новое, когда все можно сделать старым способом.(Изначально я начал писать БД вообще в BDE, это я вовремя исправил все)
0
569 / 292 / 12
Регистрация: 28.01.2011
Сообщений: 1,326
22.02.2012, 16:53 20
Nikon32rus, очень странно. Что же это вы на пыхе пишете и не разу с мускулем не работали?
Ну не смешите, итак смешная. Принципы то не меняются. Что в мускуле скуль, что в посте, что к оракле.
Просто есть особенности. А основа та же самая.
0
22.02.2012, 16:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.02.2012, 16:53
Помогаю со студенческими работами здесь

Фильтрация данных при выборке из БД
Добрый день! В vb.net я совершенно чайник, но с VB6 знаком достаточно хорошо, тем не менее с...

Фильтрация данных при выводе. XSL
Всем привет, очень нуждаюсь в вашей помощи :) У меня не получается вывести данные с помощью...

Фильтрация и поиск данных мпонента DBGrid при подключении к MySQL server (ODE)
Не могу настроить фильтрацию и поиск данных компонента DBGrid при подключении к MySQL...

Определить число всевозможных наборе в пяти различных элементах по три, если в каждом наборе одинаковые
Определить число всевозможных наборе в пяти различных элементах по три, если в каждом наборе...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru