![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как осуществить динамическую фильтрацию? [D6, ACCESS]
-=DeMoH=- © (2003-05-05 00:27:00)Юзаю БД из ACCESS с помощью ADO. Как мне сделать так, чтобы DBGrid показывал только те записи, которые начинаются со строки заданной в Edit?
procedure TForm1.Edit3Change(Sender: TObject);
begin
........
end;
-=DeMoH=- (2003-05-05 13:26:00) [1]Ooops... sorry...
Все заработало!!!
Спасибо всем, скоро еще че-нить спрошу :-])
sniknik (2003-05-05 13:25:00) [2]> но почему-то ничего и не фильтрует!
AdoTable1.Filtered:= true; ??
WarLord (2003-05-05 13:23:00) [3]Table.Filtered:= True поставил?
-=DeMoH=- (2003-05-05 13:22:00) [4]а "Like" это типа вроде условия на нестрогое равенство?
-=DeMoH=- (2003-05-05 13:19:00) [5]Написал, ошибок не выдает, но почему-то ничего и не фильтрует!
Может что-нить упустил (пробовал и DBGrid1.Refresh)
P.S.:Независимо от того, что вводится в поле, DBGrid по прежнему показывает одно и то же (но событие OnChange выполняется корректно).
WarLord (2003-05-05 13:15:00) [6]% обозначает любое сочетание символов
-=DeMoH=- (2003-05-05 13:10:00) [7]Интересный пример, а кстати зачем нужен символ "%"? А что будет, если в значении полей могут быть пробелы (типа зачем Trim)?
P.S.: Сейчас проверю, мб и заработает
Babay (2003-05-05 13:08:00) [8]procedure TForm1.Edit1Change(Sender: TObject);
begin
if Edit1.Text<>"" then
AdoTable1.Filter:="[Начальный капитал] Like ("""+Edit1.Text+"%"")"
else AdoTable1.Filter:="";
end;
Пробел до и после слова Like ОБЯЗАТЕЛЕН!!!
у меня вот так работает (специально прожку откатал)
Дальше подробнее смотри Like в языке SQL
NickBat (2003-05-05 13:05:00) [9]Экий вы батенька ленивец! :))
MyQueryFilter:="nachkap like "+#39+"%"+Trim(Edit.Text)+"%"+#39;
Причем это поставить в событии onChange для Edit
-=DeMoH=- (2003-05-05 12:34:00) [10]Меня у совсем запутали все эти галочки и кавычки! Приведите конкретный пример для, например, поля "Начальный капитал" !
И желательно для ADOTable (причем нужно сделать так, чтобы этот метод обрабатывался при каждом изменении значения поля Edit и соответственно менялась информация в DBGrid!
Babay (2003-05-05 07:54:00) [11]-> Тут можно пользоваться либо свойством Table.Filter:="pole=""+Edit1.Text+""";
это по моему несовсем верно
для ADOQuery у меня это делается так
MyQuery.Filter:="pole like("""+Edit1.Text+"%"")";
для таблице по идее должно быть так же...
-=DeMoH=- (2003-05-05 01:47:00) [12]Попробовал, но ничего не получается: прога компилится без вопросов, но вот при вводе чего-угодно в Edit выдается ошибка:
1)Несовпадение типов;
2)Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом;
sunrider (2003-05-05 00:40:00) [13]Тут можно пользоваться либо свойством Table.Filter:="pole=""+Edit1.Text+""";
Table.Filtered:=True;
(то же для Query)
Или событием OnFilter
Accept=DataSet["pole"]=Edit1.Text;
А по поводу CheckBox в DBGrid - объекты можно встраивать,
но можно использовать свойство DBGrid.SelectedRows. Только
включить в DBGrid.Options свойство - MultiSelect. После этого
организуешь цикл типа
for i:=0 to DBGrid.SelectedRows.Count-1 do
begin
Table.GotoBookmark(pointer(DBGrid.SelectedRows[i]));
<оператор>
end;
-=DeMoH=- (2003-05-05 00:31:00) [14]И еще вопрос: как мне сделать так, чтобы в DBGrid"е рядом с каждой строкой стоял CheckBox и пользователь мог таким образом отметить несколько строк, а затем по нажатии чего-либо енто все перекидывалось в каку-нибудь новую таблицу для просмотра или сохранения в файл?