|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Фильтрация через ADOQuery
Здравствуйте. Подскажите в написание события фильтрации. Пишу обработчик события фильтрации поиска фамилии, указанной в Edit1.
Код:
procedure TForm2.N3Click(Sender: TObject); begin ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('SELECT * FROM Sotrudniki WHERE familiya LIKE ''%Edit1.Text%'''); ADOQuery1.Active:=True; end; |
#2
|
||||
|
||||
Цитата:
Код:
ADOQuery1.SQL.Add('SELECT * FROM Sotrudniki WHERE familiya LIKE ''%'+Edit1.Text+'%'''); |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
Evgen_Balbes (28.09.2012)
|
#3
|
||||
|
||||
там ещё есть свойство Filter и Filtered
ставишь Filter:='familiya LIKE ''%'+Edit1.Text+'%''' и Filtered в True по итогу не надо квэрик гонять за данными на сервер фильтрация локальная Код сырец |
Этот пользователь сказал Спасибо Lost_Fish за это полезное сообщение: | ||
Evgen_Balbes (28.09.2012)
|
#4
|
||||
|
||||
Спасибо!!!
Все работает))) Но у меня есть в базе поле с типом счетчик. Пишу код
Код:
procedure TForm2.Edit1Change(Sender: TObject); begin if Length(Edit1.Text) > 0 then begin ADOQuery1.Filtered:=false; ADOQuery1.Filter:='№ i\b LIKE '+ '''' + Edit1.Text + '%' + ''''; ADOQuery1.Filtered:=true; end else ADOQuery1.Filtered:=false; end; Код:
procedure TForm2.Edit1KeyPress(Sender: TObject; var Key: Char); begin if not (Key in ['0'..'9', #8])then Key:=#0; end; Последний раз редактировалось Evgen_Balbes, 29.09.2012 в 00:03. |
#5
|
||||
|
||||
Вот скриншот ошибки.
|
#6
|
||||
|
||||
Цитата:
Код:
ADOQuery1.Filter:='[Имя поля] LIKE '+ '''' + Edit1.Text + '%' + ''''; Цитата:
|
#7
|
||||
|
||||
Исправил , теперь пишет что не возможно открыть фильтр.Но в др Edit открывает, в чем подвох?( выделяет строку 7)
Код:
procedure TForm2.Edit1Change(Sender: TObject); begin if Length(Edit1.Text) > 0 then begin ADOQuery1.Filtered:=false; ADOQuery1.Filter:='[№ i\b] LIKE '+ '''' + Edit1.Text + '%' + ''''; ADOQuery1.Filtered:=true; end else ADOQuery1.Filtered:=false; end; |
#8
|
||||
|
||||
Цитата:
Цитата:
Вместо этого можешь использовать событие OnFilterRecord примерно так: Код:
procedure TForm2.ADOQuery1FilterRecord(DataSet: TDataSet; var Accept: Boolean); begin Accept := Copy(ADOQuery1.FieldByName('№ i\b').AsString, 1, Length(Edit1.Text)) = Edit1.Text; end; |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
Evgen_Balbes (29.09.2012)
|
#9
|
||||
|
||||
Спасибо за помощь, заработало а такой вопрос (для общего развития): если у меня на форме 2 таблицы BDGrid с одинаковыми полями [familiya] ,можно искать запись сразу в двух, при вводе данных в Edit1, используя вот такую конструкцию ?
Код:
procedure TForm2.Edit1Change(Sender: TObject); begin if Length(Edit1.Text) > 0 then begin ADOQuery1.Filtered:=false; ADOQuery2.Filtered:=false; ADOQuery1.Filter:='[familiya] LIKE '+ '''' + Edit1.Text + '%' + ''''; ADOQuery2.Filter:='[familiya] LIKE '+ '''' + Edit1.Text + '%' + ''''; ADOQuery1.Filtered:=true; ADOQuery2.Filtered:=true; end else ADOQuery1.Filtered:=false; ADOQuery2.Filtered:=false; end; |
#10
|
||||
|
||||
Цитата:
А ещё эту конструкцию можно упростить как минимум таким образом: Код:
procedure TForm2.Edit1Change(Sender: TObject); begin ADOQuery1.Filtered := False; ADOQuery2.Filtered := False; if Edit1.Text <> '' then begin ADOQuery1.Filter := '[familiya] LIKE '+ '''' + Edit1.Text + '%' + ''''; ADOQuery2.Filter := '[familiya] LIKE '+ '''' + Edit1.Text + '%' + ''''; ADOQuery1.Filtered := True; ADOQuery2.Filtered := True; end; end; Последний раз редактировалось poli-smen, 30.09.2012 в 02:59. |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
Evgen_Balbes (30.09.2012)
|
#11
|
||||
|
||||
Попробовал воплотить : все работает спасибо Если где то понадобится такой "финт" обязательно воспользуюсь!!!
|