![]() |
|
|
![]()
|
|
| User |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 213 Регистрация: 5.11.2004 Репутация: нет Всего: нет |
На форме присутствуют компоненты DBGrid1, Table1, DataSource1, Edit1. Я написал следующий код для фильтрации в DBGrid1:
procedure TForm1.Edit1Change(Sender: TObject); begin if Length(Edit1.Text)>0 then Table1.Filtered:=true else Table1.Filtered:=false; Table1.Filter:='Famil>'''+FindEdit.Text+''''; end; Проблема вот в чем. Разные глюки идут. Подскажите как лучше осуществить фильтрацию. P.S. 1). Токо прошу подсказать при условии что Qyeru1 на форму не добовлять. 2). Или как грамотно добавить Qyeru1 и подключить как для осуществления фильтрации. |
|||
|
||||
| Mr.Picwick |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 23.3.2004 Репутация: нет Всего: нет |
По-моему надо сначало задавать фильтр, а потом свойство Filtered в True или False
|
|||
|
||||
| User |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 213 Регистрация: 5.11.2004 Репутация: нет Всего: нет |
Попробую правда не знаю что получиться? А как еще можно задать фильтрацию кроме указанного способа, подскажите? Лучше с примером.
|
|||
|
||||
| Mal Hack |
|
||||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: нет Всего: 261 |
Ну как вариант, чтобы не заптаться с опострофами:
|
||||
|
|||||
| User |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 213 Регистрация: 5.11.2004 Репутация: нет Всего: нет |
У меня при всех вариантах что то фильтруется, но при этом фигня какаято выскакивает. А именно. Когда я отфилтровал по первому значению все ОК. Когда фильтрую по второму то остается и первое и второе отфильтрованное значение как будто фильтрация предыдущих значений гдето сохраняется. Люди - программисты помогите справиться с этой бедой. !! Плиз!
|
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 14 Всего: 207 |
Покажи код двух фильтраций
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| MacTep |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1292 Регистрация: 4.8.2003 Где: г. Самара Репутация: нет Всего: 4 |
Скорее всего после первой фильтрации ты не приводишь таблицу к первоначальному виду и фильтруешь уже оставшиеся записи. Или нет?
-------------------- (A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :) |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
bFilterFilials - глобальная переменная
если true, то можно фильтровать procedure TfmMain.tZayFilterRecord(DataSet: TDataSet; var Accept: Boolean); begin if bFilterFilials then Accept := DataSet['ZFilial'] = lcbFilials.KeyValue; end; procedure TfmMain.tZayFilterRecord(DataSet: TDataSet; var Accept: Boolean); begin if DataSet['ZFilial'] = 'филиал' then Accept := true; end; если Accept = true, то запись попадет в набор данных и так попадут в набор данных все записи, которые имеют значение 'филиал' в поле 'ZFilial' это событие срабатывает тогда, когда ты выполняешь фильтрацию, причем в свойсве Filter не обязательно должно быть выражение фильтрации, просто выполняешь Код Table1.Filtered:=True т.е. здесь можно фильтровать записи с помощью язывка высокого уровня, а не пятью операторами SQL http://forum.vingrad.ru/index.php?showtopi...ead=1&hl=фильтр |
|||
|
||||
| Коця |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 13.2.2005 Репутация: нет Всего: нет |
Вот и у меня то-же самое... |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
Коця, покажи код
|
|||
|
||||
| Коця |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 13.2.2005 Репутация: нет Всего: нет |
procedure TForm1.Edit1Change(Sender: TObject);
begin Table1.Filtered:=false; Table1.Filter:='FIO>'''+Edit1.Text+''''; if Length(Edit1.Text)>0 then Table1.Filtered:=true else Table1.Filtered:=false; end; |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
динамическая фильтрация
Это сообщение отредактировал(а) dsergey - 17.2.2005, 16:25 |
|||
|
||||
| Коця |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 13.2.2005 Репутация: нет Всего: нет |
чтоб при удалении символов с Едита фильтрация отменялать нада добавить
procedure TListClients.Edit1Change(Sender: TObject); begin Form1.Table1.Filtered:=False; Form1.Table1.Filter:='LAST_NAME = '+QuotedStr(Edit1.Text+'*'); if Length(Edit1.Text)>0 then Table1.Filtered:=true else Table1.Filtered:=false; end; |
|||
|
||||
| User |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 213 Регистрация: 5.11.2004 Репутация: нет Всего: нет |
А можно просто запросами, правда если у тебя таблица подключена через Query
begin Query1.Active :=False; Query1.TextSQL :='SELECT Телефон FROM NAME WHERE Телефон =:Edit1.Text'; Query1.Active :=True; end; Писал по памяти, так как дельфи под рукой нет, возможны ошибки. Добавлено @ 11:12 Да забыл сказать, в самом Query нужно очищать список! Query1.SQLText.Create; - вроде так |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
|
|||
|
||||
| Коця |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 13.2.2005 Репутация: нет Всего: нет |
а как сделать фильтрацию по дате, от даты - до даты, чтото типа
|
||||||
|
|||||||
| Бойцов А.А. |
|
|||
|
Unregistered |
А почему никто не сказал ничего по поводу OnFilterRecord?
С этим событием можно отвязаться от любого синтаксиса (звездочек там, процентиков...) и самому принимать решение о фильтрации записи. |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
Бойцов А.А., лучше примеры бы привел.
Читай внимательнее:
Добавлено @ 17:15 В событии OnFilterRecord проверяется каждая запись. Если запись удовлетворяет условию кода (т.е. Accept := True), то запись будет показана в сетке. В этом событии можно выполнять очень сложные условия, включая и циклы и все, что позволяет язык программирования. Есть недостаток - ресурсоемкость. На медленных машиных тормозит конкретно. Это сообщение отредактировал(а) dsergey - 24.2.2005, 17:16 |
|||
|
||||
| StayAtHome |
|
|||
![]() Домосед ![]() ![]() Профиль Группа: Участник Сообщений: 456 Регистрация: 26.1.2004 Где: Украина Репутация: нет Всего: 16 |
dsergey
А как соотносится использование OnFilterRecord с сетевым трафиком? На клиент все равно будут затягиваться все записи? Или нет? |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
OnFilterRecord больше зависит от процессора и объема памяти, т.к. вычисления производятся на компьютере программы. Будь то сервер или клиент
|
|||
|
||||
| StayAtHome |
|
|||
![]() Домосед ![]() ![]() Профиль Группа: Участник Сообщений: 456 Регистрация: 26.1.2004 Где: Украина Репутация: нет Всего: 16 |
Где-где? |
|||
|
||||
| Sett |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 20.12.2004 Где: Подольск Репутация: нет Всего: нет |
Чё та, я тоже не пойму первое значение фильтрую нормально, при попытке отфильтроваьть второе, не чего не происходит вообще пустой DBGrid, что нужно делать покажите полный код фильтра, как будто он под кнопкой.
Спасибо |
|||
|
||||
| Akella |
|
||||||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
StayAtHome, я имел ввиду компьютер, на котором в данный момент выполняется программа (фильтрующая данные).
Добавлено @ 10:36 Sett, причем здесь кнопка? обрати внимание на это
о чём-нибудь говорит?
это говорит о том, что код
выполняется в событии OnFolteredRecord, а чтобы это событие сработало нужно вызвать
Table1.Filter - не обязятельно заполнять. Это сообщение отредактировал(а) dsergey - 28.2.2005, 10:38 |
||||||||
|
|||||||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |