![]() |
|
|
![]()
|
|
| ura5 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 12.4.2007 Репутация: нет Всего: нет |
Помогите мне с фильтром.
Необходимо ,чтобы в окне при наборе,например,фамилии все записи фильтровались ВИЗУАЛЬНО при этом ,т.е. в начале было ,например,20 записей ,потом по мере того как набираем фамилию ,количество записей уменьшалось и в итоге осталась одна или 2 записи с нужной фамилией. Связь - через ADO. Спасибо. |
|||
|
||||
| Лена |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 879 Регистрация: 16.8.2006 Репутация: 11 Всего: 11 |
Так:
Заменить связку DataModule2->ClientDataSet1 на свою и поставить нужное имя поля. P.S. Поспешила, не правильно написала. Это просто установка курсора на нужную фамилию... Это сообщение отредактировал(а) Лена - 10.5.2007, 16:53 |
|||
|
||||
| fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: 1 Всего: 1 |
-------------------- undefined |
|||
|
||||
| ura5 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 12.4.2007 Репутация: нет Всего: нет |
Лена!
Спасибо,но у меня такой вариант есть.Мне надо такой поиск по фамилии,чтобы при этом постепенно при наборе фамилии уменьшалось количество всех фамилий ,пока не дойдешь до нужной. Например, собираешься найти человека по фамилии ИВАНОВ. -Только набрал первую букву этой фамилии "И" -при этом остались из всех фамилий только те,которые начинаются именно на эту букву "И". -Набираешь 2-ю букву "В"-при этом остаются из всех ранее отобранных только те,которые начинаютя на "ИВ'. Здесь будут такие фамилии,например: ИВАНОВ,ИВАЩЕНКО,ИВОЛГИН и т.д. -Набираешь 3-ю букву "А"-при этом остаются из всех ранее отобранных только те,которые начинаютя на "ИВА'. Здесь будут такие фамилии,например: ИВАНОВ,ИВАЩЕНКО и т.д.,пока не останется фамилия "ИВАНОВ". **************** Я не знаю как осуществить такой поиск Как вы мне предлагали-то просто указатель перемещается по фамилиям, но при этом не происходит фильтрация т.е. остальные записи присутствуют. Кто знает,как это сделать-прошу помочь Спасибо. |
|||
|
||||
| SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 9 Всего: 23 |
1. Используй запросы
2. while(...->Locate(...)) { // Что делай з записями } 3. На событие OnChange твоего Edit'a меняй критерии фильтра и применяй новый фильтр. Ну или там где ты критерии вводиш Это сообщение отредактировал(а) SenkraD - 11.5.2007, 11:22 |
|||
|
||||
| fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: 1 Всего: 1 |
Юра, я извиняюсь, Вы мой пост вообще видели?
-------------------- undefined |
|||
|
||||
| ura5 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 12.4.2007 Репутация: нет Всего: нет |
fish9370!
Вопросы : 1.Что это за "Street" ? 2. *'--это что такое ? Я прошу прощения-знания очень слабые по C++Builder |
|||
|
||||
| SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 9 Всего: 23 |
1. Улица в переводе - человек бросил пример со своей программы я полагаю
2. Любое количество любых символов тоесть фильтрирует по улице |
|||
|
||||
| fish9370 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: 1 Всего: 1 |
SenkraD, спасибо..
ura5, дело в том, что у TTable есть такое свойство - Filter, по шаблону записанному в него можно отфильтровать таблицу.. синтаксис примерно такой: <название поля>='<шаблон>' шаблон может включать символ множественной подстановки * фильтр вступает в силу как только свойство Filtered выставленно в true.. возвращаемся к задаче.. чтобы добиться того эффекта, что тебе требуется, нужно обрабатывать событие OnChange.. в обработчике которого нужно прописать..
так же можно фильтровать запросами к базе типа:
но при этом нагрузка ляжет целиком на сеть и сервер.. Добавлено @ 19:31 а вообще этот метод хорошь лишь на маленьких таблицах на таблицах с тысячью записей фильтр начнет тормозить, что приведет к большому неудобству, возможно есть смысл сделать фильтр по нажатию Enter.. Это сообщение отредактировал(а) fish9370 - 11.5.2007, 19:35 -------------------- undefined |
||||
|
|||||
| ura5 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 12.4.2007 Репутация: нет Всего: нет |
fish9370!
НЕ ПОЛУЧАЕТСЯ.Как только начинаю вводить в Edit1 ПЕРВУЮ букву-сразу исчезают все записи (фамилии). В чем дело? |
|||
|
||||
| ura5 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 12.4.2007 Репутация: нет Всего: нет |
fish9370!
1.НЕ ПОЛУЧАЕТСЯ с помощью события .Как только начинаю вводить в Edit1 ПЕРВУЮ букву-сразу исчезают все записи (фамилии). В чем дело? 2.SQL-запрос ДЛЯ фильтра . "Select * from table1 where Name like '" + Edit1->Text +"%'" //обрати внимание на апострофы, они важны ГДЕ ЕГО ПОДКЛЮЧИТЬ? ****************************** мой код ******************* M_Lsab->ADOQueryLsab->SQL->LoadFromFile("SQL/Lsab2.sql"); Str1 = M_Lsab->ADOQueryLsab->SQL->Text; //Выбираем куда грузить набор данных из таблицы M_Lsab->DataSourceLsab->DataSet = M_Lsab->ADOQueryLsab; //Связываем возвращаемый набор данных и визуальные компоненты DBGrid1->DataSource = M_Lsab->DataSourceLsab; DBNavigatorSprLsab->DataSource = M_Lsab->DataSourceLsab; ************** Lsab2.sql select vid,kss,fio from telephone.sstel *************** В событии void __fastcall TTel1::Edit1Change(TObject *Sender) { M_Lsab->DataSourceLsab->DataSet->Filter="FIO='"+Edit1->Text+"*'"; M_Lsab->DataSourceLsab->DataSet->Filtered=true; } ************* все *********** |
|||
|
||||
| ura5 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 12.4.2007 Репутация: нет Всего: нет |
Помогите с фильтром!
****************** DataSource1->DataSet->Filter=Scol+ " like '"+Edit1->Text+ "*' "; //проходит для символьных полей DataSource1->DataSet->Filtered=true; ****************** Scol-это название поля Вопрос: Почему фильтр устанавливается только для символьных полей,а для числовых он не проходит? Почему? Как установить фильтр для числового поля? Спасибо. |
|||
|
||||
| SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 9 Всего: 23 |
ura5, для числовых полей используй числовые операции (<, >, <> и так далее) или же создай вычысляемое поле в которое пиши текстовое представление числового поля и уже делай фильтр по этому полю.
Это сообщение отредактировал(а) SenkraD - 15.5.2007, 16:11 |
|||
|
||||
| ura5 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 12.4.2007 Репутация: нет Всего: нет |
DataSource1->DataSet->Filter="KSS >="+ Edit1->Text+ " AND KSS <=" + Edit1->Text+ "0 "; Написала пример для фильтра для числового поля. Работает совсем не так,как надо. Надо,чтобы при наборе цифры 3 - фильтровались все записи с начальной цифрой 3. Потом набираю (например) цифру 2-фильтровались (оставались) все записи с цифрами 32. А получается ,что остаются записи больше 32,но меньше 320.Ерунда. |
|||
|
||||
| ura5 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 12.4.2007 Репутация: нет Всего: нет |
Привожу пример кода для ФИЛЬТРА для символьных и числовых полей: ************************************** Stroka1 = ADOQuery1->SQL->Text;//текст SQL-запроса SCol=DBGrid1->Columns->Items[N]->FieldName; ************************************** void __fastcall TTel1::Edit1Change(TObject *Sender) { SctSQ(ADOQuery1,Stroka1+" and UPPER(" + SCol+") LIKE UPPER('"+Edit1->Text+"%')"); } ******************** void TM_Lsab::SctSQ(TADOQuery* ADOQuery1,String File) {// Выбор запроса select для отображения таблицы ADOQuery1->Close(); ADOQuery1->SQL->Clear(); ADOQuery1->SQL->Text=File; ADOQuery1->Open(); } |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |