|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Фильтр данных в DbGrid
Плиииз,подскажите,как осуществлять поиск в таблице по первой букве фамилии,например.Необходимо в окне поиска при вводе первой буквы Фамилии таблица выдавала список Фамилий на эту букву..Я нууу просто не знаю..Развожу руками!
|
#2
|
|||
|
|||
Код события OnChange у компонента FilterFamEdit - TEdit (FilterFamEdit - строка поиска)
procedure TStudentForm.FilterFamEditChange(Sender: TObject); begin If Length(FilterFamEdit.Text)>0 then DataModule1.StudentTable.Filtered:=True else DataModule1.StudentTable.Filtered:=False; DataModule1.StudentTable.Filter:='Фамилия>'''+Filt erFamEdit.Text+''''; end; |
#3
|
|||
|
|||
Цитата:
Можно с помощью Query. Наиболее шустрый метод. Используете компонент Query или ADOQuery, смотря с какой базой работаете. В событие Edit-а OnKeyUp прописываете Код:
s:=edit1.text+'%'; with Query1 do begin Close; SQL.Clear; SQL.Add('SELECT DISTINCT familia FROM Table'); SQL.Add('WHERE familia LIKE'+quotedstr(s)); SQL.Add('ORDER BY familia'); Open; end; Последний раз редактировалось MegaPiha, 12.04.2008 в 22:34. |
#4
|
||||
|
||||
Цитата:
А вот вам реализация.. для образца. Программирование - стиль жизни |
#5
|
||||
|
||||
Эммм...Проблема в том,что я супер-пупер начинающий программер на Делфи,ниже чайника,я полагаю,и SQL-запросами не баловалась ни разу..Если бы поподробнее кто-нибудь с железными нервами и терпением самаритянина смог объяснить на пальцах,была бы благодарна.Заранее спасибо.
|
#6
|
|||
|
|||
Цитата:
|
#7
|
|||
|
|||
а еще можно вот так
Пусть имеется набор данных table1, с полем fam которое содержит список фамилий сотрудников. Также в приложении имеется окно редактирования EFam в которое будут вводится символы фамилии.Необходимо организовать ускоренный поиск записи по мере ввода фамилии. В обарботчик события ONchange окна EFam вставляем оператор Код:
table1.locate('fam',Efam.text,[IoCaseInsensitive,IoPartialKey]); И побоку все SQL запросы. Последний раз редактировалось xmuriy, 14.04.2008 в 12:03. |
#8
|
||||
|
||||
Цитата:
Делаю диплом по здравпункту..Верне пытаюсь делать.База на Paradox.Осваиваю все сама,потому и очень трудно.. |
#9
|
||||
|
||||
Можно еще и так:
Код:
with dB_Table do begin SetKey; FieldByName('FIO').Value:=DBEdit1.Text; GoToKey; dB_Table.Edit; end; Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
#10
|
|||
|
|||
Цитата:
Опишите задачу, поконкретнее. Какие поля (столбцы) должны быть в таблицах, сколько таблиц? Какие должны быть возможности? По каким полям организовывать поиск? Для таблиц Paradox используйте компоненты из закладки BDE. Предлагаю, для начала прочитать основы по созданию баз данных. Например поищите книгу Владимира Гофмана и Анатолия Хоменко "Delphi быстрый старт". |
#11
|
||||
|
||||
Цитата:
|
#12
|
|||
|
|||
Цитата:
Пример фильтрования данных в компоненте Table . Код:
Table1.Filtered:=false; Table1.Filter:='fam like ' +quotedstr(edit1.Text+'%'); Table1.Filtered:=true; |
#13
|
||||
|
||||
Цитата:
Прописала в Квери: SELECT * FROM kartabolnih.db SELECT DISTINCT Fio FROM kartabolnih.db WHERE Fio LIKE ORDER BY Fio В событии Эдита OnKeyUp прописала: Код:
procedure TForm17.Edit2KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); var s:string; begin s:='%'+edit2.text+'%'; with Query1 do begin Close; SQL.Clear; SQL.Add('SELECT DISTINCT Fio FROM kartabolnih.db'); SQL.Add('WHERE Fio LIKE'+quotedstr(s)); SQL.Add('ORDER BY Fio'); Open; end; end; Admin: Не забываем про оформление кода! В итоге,получилось,что прописывать в Эдит прописывает,но ничего не фильтрует Где ошибка моя? Последний раз редактировалось Admin, 17.04.2008 в 10:18. |
#14
|
|||
|
|||
В таком виде вообще должна получать ошибку при переоткрытии запроса (нет пробела после LIKE в строковой константе).
С другой стороны выбранный метот не самый лучший, т.к. требует много времени при большом кол-ве записей в таблице. Если хочешь фильтровать именно выборку, то лучше сделать так, как сделано в uTorrent. Бросаешь TEdit куда-нибудь. В нем в OnKeyPress: Код:
const CSQL = 'SELECT DISTINCT Fio FROM kartabolnih.db'#13#10+ 'WHERE Fio LIKE ''%s'''#13#10+ 'ORDER BY Fio'; begin If Key = #13 Then Begin Query.Close; Query.SQL.Clear; Query.SQL.Add(Format(CSQL,['%'+Edit1.Text+'%'])); Query.Open; End; end; Т.е. получаем, что пользлватель вводит строку поиска, жмет Enter и получает отфильтрованную выборку. Далее можно поиграться с различными переключателями типа "начинается с" и т.д. Еще один момент. Почитай как отрабатывается LIKE на твоей БД - с учетом регистра или нет (зависит от самой БД). Тогда, возможно надо будет обернуть LIKE в UPPER (для Oracla - WHERE UPPER(FIO) LIKE что-то-там-извне). Последний раз редактировалось Admin, 17.04.2008 в 10:18. |
#15
|
|||
|
|||
Цитата:
|