Приветствую всех! Прошу знающих людей подсказать, как можно реализовать:
- Есть форма с TDBgrid, TSQLQuery, TDataSource - используется для отображения справочника. Хочу чтобы можно было осуществлять интерактивный поиск с клавиатуры по столбцу в котором находится курсор. По задумке хотел использовать свойство TSQLQuery.Filter, чтобы при каждом нажатии список визуально сокращался при срабатывании фильтра, но DBGrid не отображает информацию с условием фильтра, а показывает полностью всё, а также показывает пустые строки, которые при прокрутке мыши исчезают. Вариант с изменением запроса при каждом нажатии клавиши не подходит, вариант с дополнительным полем на форме для поиска и кнопкой найти - не подходит. Если кто использует свойство Filter и выводит результат в Грид, дайте образец кода пожалуйста или ссылку. У меня Lasarus 1.0 + MySQL + WinXP.
Заранее благодарен!!!
TDBGrid + TSQLQuery + Filter
Модератор: Модераторы
Я не проверял, но чутье подсказывает, что дело может быть в свойстве Filtered.
dunin писал(а):men260181 писал(а):...Вариант с изменением запроса при каждом нажатии клавиши не подходит, вариант с дополнительным полем на форме для поиска и кнопкой найти - не подходит....
Почему?
Действительно - почему? Если в запросе использовать regexp, появляются дополнительные фишки при поиске.
реализация так и не понятна
http://www.freepascal.ru/forum/viewtopi ... 01&p=74625
Я сделал так (на Lazarus):
//для события SQLQuery1.OnFilterRecord
procedure TForm2.SQLQuery1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
var
s1,s2:UnicodeString;
begin
s1:=SQLQuery1.FieldByName('field_name').Value;
s2:=Edit2.Text;
Accept:=False;
if POS(UpCase(s2),UpCase(s1))<>0 then Accept:=True;
end;
//для события Edit2.OnChange
procedure TForm2.Edit2Change(Sender: TObject);
begin
if Edit2.Text='' then
SQLQuery1.Filtered:=False
else
begin
SQLQuery1.Filtered:=False;
SQLQuery1.Filtered:=True;
end;
end;
Я сделал так (на Lazarus):
//для события SQLQuery1.OnFilterRecord
procedure TForm2.SQLQuery1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
var
s1,s2:UnicodeString;
begin
s1:=SQLQuery1.FieldByName('field_name').Value;
s2:=Edit2.Text;
Accept:=False;
if POS(UpCase(s2),UpCase(s1))<>0 then Accept:=True;
end;
//для события Edit2.OnChange
procedure TForm2.Edit2Change(Sender: TObject);
begin
if Edit2.Text='' then
SQLQuery1.Filtered:=False
else
begin
SQLQuery1.Filtered:=False;
SQLQuery1.Filtered:=True;
end;
end;
