Страница: 1 |
Может на этом форуме то подскажет If DataGridAll.Col = 6 Then sFilter = "Этажность = " & DataGridAll.Text & "" End If If DataGridAll.Col = 5 Then sFilter = "Этаж = " & DataGridAll.Text & "" End If Adodc1.Recordset.Filter = sFilter Необходимо чтобы фильтр ложился последовательно: на примере кода должны выбрать 5 этажи в 9 этажных домах, сейчас реально получается что выбираем либо 5 этажи либо 9 этажные дома т.е. после каждого даблклика происходит обновление рекордсета На форуме VBstreet ребята подкинули темы для опытов: sFilter = Adodc1.Recordset.Filter If (Len(sFilter)) Then sFilter = sFilter & " AND " If DataGridAll.Col = 16 Then sFilter = sFilter & "[Аг_во] = '" & DataGridAll.Text & "'" End If If DataGridAll.Col = 5 Then sFilter = sFilter & "Этаж = '" & DataGridAll.Text & "'" End If Adodc1.Recordset.Filter = sFilter Adodc1.ShowWhatsThis Posted - 22/08/2002 : 04:46:28 фильтр надо накапливать: т.е. Фильтр="(" & Фильтр & ") AND " & НовыйФильтр Adodc1.Recordset.Filter=Фильтр но есть ограничения, длина строки не более 255 символов. Лучше всего всего подключать DBGRID к промежуточной таблице и применять последоательно фильтры: tbl.filter=фильтр1 set tbl=tbl.openrecordset tbl.filter=фильтр2 set tbl=tbl.openrecordset Но к сожаления я не догоняю как это все правильно организовать фильтр корректным все равно не получается либо AND присутствует либо ()
не знаю может немного не в тему (может я не так понял вопрос): попробуй так - каждое выражение фильтра заключай в скобки, т.е. например строка фильтра: "(этаж=(5)) and (этажей=(9))" иногда такая фишка прокатывает... вообще страка фильтра должно соответсвовать условию SQL-запроса Where (только без него)... Или сделай проще - создай рекордсет с отобранными записями и положи его адодс а потом рефреш!... 2 Slay Через ADODC код уже сделан (т.е. обачная выборка SQl) и все работает только у меня спортивный интерес, Если есть Filter Должен же он работать и ксати фильтром кода получается все равно меньще Filter est no on ispolzuetsa nemnogo ne tak kak ti ojidaesh. Na dele poluchaetsa otkritie nowogo recordseta na osnowanii dannih iz starogo i filtrowanie ego. Wot kak eto wigladit: Pishesh wot takuju funkciju Public Function FilterField(rstTemp As ADODB.Recordset, _ set RstOuntry=filterfield(rst, "Country", strCountry) gde Country - filtruemoe pole, a strCountry - filtr, rst-otkritij recordset so wsemi dannimi. Wot tak primerno. Drugogo sposoba netu, no w lubom sluchae prosche filtrowat prosto SqlString... вот пример реализации в DAO (в ADO будет также только контролы несколько другие), на форме Data Bound Grid, Text Box, пара Button и Data Control.... Option Explicit Private Sub cmdAll_Click() Private Sub cmdFilter_Click() Private Sub Form_Load() Sub ExecuteFilter() Если хочешь могу выслать свой сампл (извини только на DAO) ... который в принципе я писал для кого-то в этом форуме (не помню кто спрашивал...) Страница: 1 |
Вопрос: Как же всетаки фильтрануть DBGrid
Добавлено: 22.08.02 21:12
Автор вопроса: krokus
Ответы
Всего ответов: 4
Номер ответа: 1
Автор ответа:
Slay
Вопросов: 27
Ответов: 150
Web-сайт:
Профиль | | #1
Добавлено: 23.08.02 09:24
Номер ответа: 2
Автор ответа:
krokus
Вопросов: 2
Ответов: 3
Профиль | | #2
Добавлено: 23.08.02 19:38
Номер ответа: 3
Автор ответа:
MAGNUS
Вопросов: 12
Ответов: 430
Профиль | | #3
Добавлено: 23.08.02 20:46
strField As String, strFilter As String) As ADODB.Recordset
' Set a filter on the specified Recordset object and then
' open a new Recordset object.
rstTemp.Filter = strField & " = '" & strFilter & "'"
Set FilterField = rstTemp
End Function
A potom ispolzuesh ee pri filtrowanii
Номер ответа: 4
Автор ответа:
Slay
Вопросов: 27
Ответов: 150
Web-сайт:
Профиль | | #4
Добавлено: 26.08.02 08:45
Dim db1 As Database
Dim rs1 As Recordset
rs1.Filter = ""
Set Data1.Recordset = rs1.OpenRecordset
DBGrid1.Refresh
End Sub
ExecuteFilter
End Sub
Set db1 = DBEngine.OpenDatabase(App.Path & "\main.mdb")
Set rs1 = db1.OpenRecordset("select * from tab1 where y=1", dbOpenDynaset)
rs1.Filter = txtFilter.Text
rs1.Requery
ExecuteFilter
End Sub
rs1.Filter = txtFilter.Text
Set Data1.Recordset = rs1.OpenRecordset
DBGrid1.Refresh
End Sub