Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Как же всетаки фильтрануть DBGrid Добавлено: 22.08.02 21:12  

Автор вопроса:  krokus

Может на этом форуме то подскажет

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 присутствует либо ()

Ответить

  Ответы Всего ответов: 4  

Номер ответа: 1
Автор ответа:
 Slay



Вопросов: 27
Ответов: 150
 Web-сайт: www.slaysoft.stormway.ru
 Профиль | | #1
Добавлено: 23.08.02 09:24

не знаю может немного не в тему (может я не так понял вопрос):

попробуй так - каждое выражение фильтра заключай в скобки, т.е. например строка фильтра: "(этаж=(5)) and (этажей=(9))" иногда такая фишка прокатывает... вообще страка фильтра должно соответсвовать условию SQL-запроса Where (только без него)... Или сделай проще - создай рекордсет с отобранными записями и положи его адодс а потом рефреш!...

Ответить

Номер ответа: 2
Автор ответа:
 krokus



Вопросов: 2
Ответов: 3
 Профиль | | #2 Добавлено: 23.08.02 19:38

2 Slay

Через ADODC код уже сделан (т.е. обачная выборка SQl) и все работает только у меня спортивный интерес, Если есть Filter Должен же он работать и ксати фильтром кода получается все равно меньще

Ответить

Номер ответа: 3
Автор ответа:
 MAGNUS



Вопросов: 12
Ответов: 430
 Профиль | | #3 Добавлено: 23.08.02 20:46

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, _
   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

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...

Ответить

Номер ответа: 4
Автор ответа:
 Slay



Вопросов: 27
Ответов: 150
 Web-сайт: www.slaysoft.stormway.ru
 Профиль | | #4
Добавлено: 26.08.02 08:45

вот пример реализации в DAO (в ADO будет также только контролы несколько другие), на форме Data Bound Grid, Text Box, пара Button и Data Control....

Option Explicit
Dim db1 As Database
Dim rs1 As Recordset

Private Sub cmdAll_Click()
rs1.Filter = ""
Set Data1.Recordset = rs1.OpenRecordset
DBGrid1.Refresh
End Sub

Private Sub cmdFilter_Click()
ExecuteFilter
End Sub

Private Sub Form_Load()
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

Sub ExecuteFilter()
rs1.Filter = txtFilter.Text
Set Data1.Recordset = rs1.OpenRecordset
DBGrid1.Refresh
End Sub

Если хочешь могу выслать свой сампл (извини только на DAO) ... который в принципе я писал для кого-то в этом форуме (не помню кто спрашивал...)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам