Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Фильтрация  (Прочитано 9419 раз)
0 Пользователей и 4 Гостей смотрят эту тему.
Gora
Гость
« : 06-05-2008 16:11 » 

Здравствуйте уважаемые.
Ситуация такая: база данных Paradox, на форме классическая связка DBGrid, DataSource, Table, также Combobox1 - содержит список всех полей таблицы, и Edit1 - поле для ввода данных которые пользователь надеется найти в базе.
 Фильтрация таблицы происходит следующим образом: пользователь выбирает в Combobox1 поле для ф-ции, в Edit1 начинает набирать искомый текст - вводит первую буковку выводятся данные начинающиеся с этой буковки, вводит вторую - с 1 и 2й и т.д. пока не найдет полезное или ничего не найдет. т.е DBGrid пустой, так вот как отследить этот момент.
Вот часть кода:

procedure TForm1.Table1FilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
var FieldVal:string; i: integer; b: boolean;
begin
 
  FieldVal := DataSet[COMBOBOX1.Text];
  for i:=1 to length(edit1.text) do
     begin
       if (FieldVal = edit1.Text) then b:=true else b:=false;
       if b=false then break;
     end;
   Accept := b;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
    table1.Filtered:=true;
end;
 
Все работает как часы. Хочется узнать мнение по поводу алгоритма, оптимизации, может есть другой способ.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 06-05-2008 17:22 » 

Gora, оформи код тегами [code] [/code]
У тебя два вопроса
Как отследить
И все работает. Как оптимизировать?

Какой важней? Второй противоречит первому.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Gora
Гость
« Ответ #2 : 06-05-2008 18:10 » 

Ничего не противоречит.
Этот код работает т.е. все фильтруется, и нужно отловить момент когда искомые данные не найдены в этом основная суть вопроса.
Да в строчке  if (FieldVal = edit1.Text) then b:=true else b:=false; после FieldVal и  edit1.Text не хватает квадратных скобок и переменной i в средине. Ошибка не моя, форум не пропустил.
Записан
Gora
Гость
« Ответ #3 : 07-05-2008 15:26 » 

Код:
 
            if table1.RecordCount = 0 then  ....     

Всем спасибо, все свободны.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 08-05-2008 17:48 » 

Gora, ой, спасибо за разрешение! ))) А ты невнимательный - обернул бы код в теги, "форум бы пропустил" Ага
Записан

Gora
Гость
« Ответ #5 : 09-05-2008 07:06 » 

Ну колкости говорить мы все умеем ....
А вот еще один способ
Код:
procedure TForm1.Table1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
   Accept := pos(Edit1.text, DataSet[COMBOBOX1.Text])<>0;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
    table1.Filtered:=true;
end;

 А может кому и сгодится ...
Люди только тогда сообщают нам интересные сведения, когда мы им противоречим. Джордж Бернард Шоу
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 09-05-2008 15:47 » 

Gora, да Боженька упаси колкости говорить Улыбаюсь Ну вот если бы лично я знал ответ на вопрос - я бы первый и ответил.
Только я не дельфист
Записан

Gora
Гость
« Ответ #7 : 27-05-2008 12:14 » new

Нашел статейку по этой теме     Фильтрация данных в Delphi
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines