Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Access 2007] Filtrowanie za pomocą pola kombi
Forum PHP.pl > Forum > Bazy danych > Access
SQ7RJH
Dzień dobry.

Mam taki mały problem z procedurą do pola kombi.
W bazie mam formularz powiedzmy o nazwie "fw_X'. W tym formularzu wyświetla się w polu 'szczegóły' pod formularz stworzony na podstawie kwerendy "kw_dzialki". W nagłówku znajduje sie pole kombi o nazwie "Kombi4'.
Mam prośbę o jakąś przykładową procedurę która pozwoli filtrować ten pod formularz za pomocą listy pola kombi.
Ponieważ dopiero zaczynam prosił bym o cierpliwość i w miarę "łopatologiczne" omówienie co do czego służy.
mar1aczi
Wykorzystaj zdarzenie "Po aktualizacji" dla combobox'a - ustawi filtr dla podformy z danymi.
Kod
Me.Filter = "[Fieldname] = " & Me.comboname
DoCmd.RunCommand acCmdApplyFilterSort

Coś podobnego tutaj
SQ7RJH
Czyli powinno to wyglądać tak:
Kod
Private Sub Kombi4_AfterUpdate()
     ' Find the record that matches the control.
    Dim rs As Object

    Set rs = Me.Recordset.Clone ( tu jest błąd)
    rs.FindFirst "[KW_DANE_DO_WYJAZDU_DZIAŁKI podformularz3] = " & Str(Nz(Me![Kombi4], 0))
    If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub


Ale chyba nie będzie to poprawne ponieważ wyskakuje mi błąd:

Cytat
Run-time error '91':
Object variable or With block variable not set.


albo takiego:
Kod
Private Sub Kombi4_AfterUpdate()
     Me.Filter = "[KW_DANE_DO_WYJAZDU_DZIAŁKI podformularz3] = " & Me.Kombi4
DoCmd.RunCommand acCmdApplyFilterSort
End Sub
mar1aczi
Zamiast "Me" powinieneś użyć nazwy podformularza. Jak to nie problem to wystaw do pobrania "projekt".
SQ7RJH
... ok, ale w którym miejscu kodu?
mar1aczi
W tej linii
Kod
Me.Filter = "[KW_DANE_DO_WYJAZDU_DZIAŁKI podformularz3] = " & Me.Kombi4

"Me.Filter" to ma być odwołanie do podformularza, bo jego zamierzasz przefiltrować, a "Me.Kombi4" ma odwoływać się do pola kombi na formularzu.

Dodane:
Proszę: http://www.access-programmers.co.uk/forums...amp;postcount=9
SQ7RJH
Skorzystałem z tego przykładu który kolega wstawił. I po wstawieniu nazw swoich do kodu wyszło mi coś takiego:
Kod
Private Sub Kombi4_AfterUpdate()
    Call RunFilter
End Sub
Private Sub kwDzialkiSubForrm_Load()
Call RunFilter
End Sub
Private Sub RunFilter()

    Dim strFilter       As String
    Dim bFilter         As Boolean

bFilter = False
strFilter = ""
    

If Nz(Me.Kombi4, "<All>") > "<All>" Then   'ShortCode'
    If Len(Nz(strFilter)) > 0 Then strFilter = strFilter & " And "
    strFilter = strFilter & "ShortCode = '" & Me.Kombi4 & "'"
    bFilter = True
    End If
If bFilter Then
    Me.kwDzialkiSubForm.Form.OrderBy = ""
    Me.kwDzialkiSubForm.Form.Filter = strFilter
    Me.kwDzialkiSubForm.Form.FilterOn = True
    Else
    Me.kwDzialkiSubForm.Form.FilterOn = False
    End If



End Sub


Problem polega na tym, że w zasadzie instrukcja nic nie zmienia w wybranym pod formularzu „kwDzialkiSubForm” (pole kombi ma nazwę „Kombi4”) może coś pominąłem? sciana.gif


ps. co zauwarzyłem w przykładzie (notabene działającym) a czego u mnie nie ma, to że ja stworzyłem podformularz z kwerendy za pomocą Formantu : "Podformularz/Raport", a w przykładzie jest osobny formularz z tabelką. Czy to może mieć znaczenie questionmark.gif
mar1aczi
Jeśli nie zmienia zawartości podformularza, to coś nie tak - jak piszesz.
Jaka wersja Accessa? Mając źródła jest gdzie spojrzeć.
bubaguba
Dla potomnych
Private Sub kwDzialkiSubForrm_Load()
w pozostałych jest błąd samo "r" lub odwrotnie sprawdzałem kod z powyżej podanej strony działa prawidłowo.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2021 Invision Power Services, Inc.