Filter on subform using unbound text box

  • Follow


Hello Forum Members:

I'd like to have some help on the following codes on the Access 2000:
On the Form Header, I have an unbound text box called FindWord, in which I 
type some words to search. The code below works on the main form.
{code}
Private Sub cmdFilter_Click()
    Dim strWhere As String
    Dim lngLen As Long
    If Not IsNull(Me.FindWord) Then
        strWhere = strWhere & "([English] Like ""*" & Me.FindWord & "*"") 
AND "
    End If
    lngLen = Len(strWhere) - 5
    If lngLen <= 0 Then
        MsgBox "Nothing is specified.", vbInformation, "Nothing to show."
    Else
        strWhere = Left$(strWhere, lngLen)
        Me.Filter = strWhere
        Me.FilterOn = True
    End If
End Sub
{/code}
{code}
Private Sub cmdReset_Click()
    Dim ctl As Control
    For Each ctl In Me.Section(acHeader).Controls
        Select Case ctl.ControlType
        Case acTextBox
            ctl.Value = Null
        Case acCheckBox
            ctl.Value = False
        End Select
    Next
    Me.FilterOn = False
End Sub
{/code}

However, what I want is that I would like to accomplish the same thing on a 
SubForm inside the main Form. So I made some changes as follows:
* Me.Filter = strWhere was changed to:
Me.Child19.Form.Filter = "[English]='" & Me.FindWord & "'"
* Me.FilterOn = True was changed to:
Me.Child19.Form.FilterOn = True

This modified code is working, but
1) when I search a word such as "tomato", the result used to be like 
"tomato" and "tomatoes", but now I get only "tomato".

2) when I hit the reset button on the result page, it used to go back to the 
original screen, but now it just resets (clears) the word in a search box 
(called FindWord unbound text box).

Would you be able to help me accomplish the above 1) and 2) on a SubForm?

With best regards,
Hiro

0
Reply Utf 3/11/2008 6:40:00 AM

Hiro,

As far as I can tell...

1)  I think you need the 'Like' operator rather than '=', therefore change:
Me.Child19.Form.Filter = "[English]='" & Me.FindWord & "'"
.... to:
Me.Child19.Form.Filter = "[English] Like '*" & Me.FindWord & "*'"

2)  Make a similar change in the Reset code as you made in the other. 
In particular, change:
For Each ctl In Me.Section(acHeader).Controls
.... to:
For Each ctl In Me.Child19.Form.Section(acHeader).Controls

-- 
Steve Schapel, Microsoft Access MVP

Hiro wrote:
> Hello Forum Members:
> 
> I'd like to have some help on the following codes on the Access 2000:
> On the Form Header, I have an unbound text box called FindWord, in which I 
> type some words to search. The code below works on the main form.
> {code}
> Private Sub cmdFilter_Click()
>     Dim strWhere As String
>     Dim lngLen As Long
>     If Not IsNull(Me.FindWord) Then
>         strWhere = strWhere & "([English] Like ""*" & Me.FindWord & "*"") 
> AND "
>     End If
>     lngLen = Len(strWhere) - 5
>     If lngLen <= 0 Then
>         MsgBox "Nothing is specified.", vbInformation, "Nothing to show."
>     Else
>         strWhere = Left$(strWhere, lngLen)
>         Me.Filter = strWhere
>         Me.FilterOn = True
>     End If
> End Sub
> {/code}
> {code}
> Private Sub cmdReset_Click()
>     Dim ctl As Control
>     For Each ctl In Me.Section(acHeader).Controls
>         Select Case ctl.ControlType
>         Case acTextBox
>             ctl.Value = Null
>         Case acCheckBox
>             ctl.Value = False
>         End Select
>     Next
>     Me.FilterOn = False
> End Sub
> {/code}
> 
> However, what I want is that I would like to accomplish the same thing on a 
> SubForm inside the main Form. So I made some changes as follows:
> * Me.Filter = strWhere was changed to:
> Me.Child19.Form.Filter = "[English]='" & Me.FindWord & "'"
> * Me.FilterOn = True was changed to:
> Me.Child19.Form.FilterOn = True
> 
> This modified code is working, but
> 1) when I search a word such as "tomato", the result used to be like 
> "tomato" and "tomatoes", but now I get only "tomato".
> 
> 2) when I hit the reset button on the result page, it used to go back to the 
> original screen, but now it just resets (clears) the word in a search box 
> (called FindWord unbound text box).
> 
> Would you be able to help me accomplish the above 1) and 2) on a SubForm?
> 
> With best regards,
> Hiro
> 
0
Reply Steve 3/11/2008 7:51:48 AM


Dear Steve:

Thank you for your help so fast.
I checked your suggestions and the {code}Me.Child19.Form.Filter = "[English] 
Like '*" & Me.FindWord & "*'"{/code} puts the desired function back.
And for {code} For Each ctl In Me.Child19.Form.Section(acHeader).Controls 
{/code} is not working. It does not reset (clears) the words on the result 
page nor go back to the original screen.

Would you please advise me what other adjustments I need to make?

With best regards,
Hiro

"Steve Schapel" wrote:

> Hiro,
> 
> As far as I can tell...
> 
> 1)  I think you need the 'Like' operator rather than '=', therefore change:
> Me.Child19.Form.Filter = "[English]='" & Me.FindWord & "'"
> .... to:
> Me.Child19.Form.Filter = "[English] Like '*" & Me.FindWord & "*'"
> 
> 2)  Make a similar change in the Reset code as you made in the other. 
> In particular, change:
> For Each ctl In Me.Section(acHeader).Controls
> .... to:
> For Each ctl In Me.Child19.Form.Section(acHeader).Controls
> 
> -- 
> Steve Schapel, Microsoft Access MVP
> 
> Hiro wrote:
> > Hello Forum Members:
> > 
> > I'd like to have some help on the following codes on the Access 2000:
> > On the Form Header, I have an unbound text box called FindWord, in which I 
> > type some words to search. The code below works on the main form.
> > {code}
> > Private Sub cmdFilter_Click()
> >     Dim strWhere As String
> >     Dim lngLen As Long
> >     If Not IsNull(Me.FindWord) Then
> >         strWhere = strWhere & "([English] Like ""*" & Me.FindWord & "*"") 
> > AND "
> >     End If
> >     lngLen = Len(strWhere) - 5
> >     If lngLen <= 0 Then
> >         MsgBox "Nothing is specified.", vbInformation, "Nothing to show."
> >     Else
> >         strWhere = Left$(strWhere, lngLen)
> >         Me.Filter = strWhere
> >         Me.FilterOn = True
> >     End If
> > End Sub
> > {/code}
> > {code}
> > Private Sub cmdReset_Click()
> >     Dim ctl As Control
> >     For Each ctl In Me.Section(acHeader).Controls
> >         Select Case ctl.ControlType
> >         Case acTextBox
> >             ctl.Value = Null
> >         Case acCheckBox
> >             ctl.Value = False
> >         End Select
> >     Next
> >     Me.FilterOn = False
> > End Sub
> > {/code}
> > 
> > However, what I want is that I would like to accomplish the same thing on a 
> > SubForm inside the main Form. So I made some changes as follows:
> > * Me.Filter = strWhere was changed to:
> > Me.Child19.Form.Filter = "[English]='" & Me.FindWord & "'"
> > * Me.FilterOn = True was changed to:
> > Me.Child19.Form.FilterOn = True
> > 
> > This modified code is working, but
> > 1) when I search a word such as "tomato", the result used to be like 
> > "tomato" and "tomatoes", but now I get only "tomato".
> > 
> > 2) when I hit the reset button on the result page, it used to go back to the 
> > original screen, but now it just resets (clears) the word in a search box 
> > (called FindWord unbound text box).
> > 
> > Would you be able to help me accomplish the above 1) and 2) on a SubForm?
> > 
> > With best regards,
> > Hiro
> > 
> 
0
Reply Utf 3/11/2008 6:33:00 PM

Hiro,

Where is this Reset button?  On a form, I presume, but which form?  Is 
the button on the same form as the controls you want to clear the 
entries from?

-- 
Steve Schapel, Microsoft Access MVP

Hiro wrote:
> Dear Steve:
> 
> Thank you for your help so fast.
> I checked your suggestions and the {code}Me.Child19.Form.Filter = "[English] 
> Like '*" & Me.FindWord & "*'"{/code} puts the desired function back.
> And for {code} For Each ctl In Me.Child19.Form.Section(acHeader).Controls 
> {/code} is not working. It does not reset (clears) the words on the result 
> page nor go back to the original screen.
> 
> Would you please advise me what other adjustments I need to make?
0
Reply Steve 3/13/2008 4:08:10 AM

Hello Steve:

Thank you for looking into this problem once again. I am still trying to 
find a solution for this.
The reset button (cmdReset) is placed on the main form (form header) and is 
also showing up on the same main form (after filtering), from which I want to 
clear and go back to the original main form (before filtering).
But does this information help?

With best regards,
Hiro Shiratori


"Steve Schapel" wrote:

> Hiro,
> 
> Where is this Reset button?  On a form, I presume, but which form?  Is 
> the button on the same form as the controls you want to clear the 
> entries from?
> 
> -- 
> Steve Schapel, Microsoft Access MVP
> 
> Hiro wrote:
> > Dear Steve:
> > 
> > Thank you for your help so fast.
> > I checked your suggestions and the {code}Me.Child19.Form.Filter = "[English] 
> > Like '*" & Me.FindWord & "*'"{/code} puts the desired function back.
> > And for {code} For Each ctl In Me.Child19.Form.Section(acHeader).Controls 
> > {/code} is not working. It does not reset (clears) the words on the result 
> > page nor go back to the original screen.
> > 
> > Would you please advise me what other adjustments I need to make?
> 
0
Reply Utf 3/13/2008 6:07:01 AM

Hiro,

I must apologise, but I am really not clear what the situation here.

So you have a command button cmdReset which is on the Header section of 
a form.  And the goal is to clear he values from some controls.  So what 
is the name of the form?  And where are the controls?

-- 
Steve Schapel, Microsoft Access MVP

Hiro wrote:
> Hello Steve:
> 
> Thank you for looking into this problem once again. I am still trying to 
> find a solution for this.
> The reset button (cmdReset) is placed on the main form (form header) and is 
> also showing up on the same main form (after filtering), from which I want to 
> clear and go back to the original main form (before filtering).
> But does this information help?
> 
0
Reply Steve 3/13/2008 8:05:54 AM

Hello Steve:

Once again, thank you for your continued follow-up.
* Main Form is called DictionaryMain_Query.
On the form header of the main form, I have placed an unbound text box 
"FindWord", a filter button "cmdFilter" and a reset button "cmdReset".
* Sub Form is called DictionaryMain_Query_SubForm.

So far, the filter button "cmdFilter" is working. Does the reset button 
"cmdReset" allow me to clear the words inside the unbound text box and go 
back to the original main form before filtering using a sub form approach?
Because if I juse just a main form, the reset button "cmdReset" just does 
clear the words inside the unbound text box and go back to the original main 
form before filtering.

With best regards,
Hiro Shiratori

"Steve Schapel" wrote:

> Hiro,
> 
> I must apologise, but I am really not clear what the situation here.
> 
> So you have a command button cmdReset which is on the Header section of 
> a form.  And the goal is to clear he values from some controls.  So what 
> is the name of the form?  And where are the controls?
> 
> -- 
> Steve Schapel, Microsoft Access MVP
> 
> Hiro wrote:
> > Hello Steve:
> > 
> > Thank you for looking into this problem once again. I am still trying to 
> > find a solution for this.
> > The reset button (cmdReset) is placed on the main form (form header) and is 
> > also showing up on the same main form (after filtering), from which I want to 
> > clear and go back to the original main form (before filtering).
> > But does this information help?
> > 
> 
0
Reply Utf 3/13/2008 5:38:00 PM

Hiro,

Ok, I think I understand.  I think your code needs to be like this:

Private Sub cmdReset_Click()
    Me.FindWord = Null
    With Me.DictionaryMain_Query_SubForm.Form
       .Filter = ""
       .FilterOn = False
    End With
End Sub

Let us know if it is still not doing what you want.

-- 
Steve Schapel, Microsoft Access MVP

Hiro wrote:
> Hello Steve:
> 
> Once again, thank you for your continued follow-up.
> * Main Form is called DictionaryMain_Query.
> On the form header of the main form, I have placed an unbound text box 
> "FindWord", a filter button "cmdFilter" and a reset button "cmdReset".
> * Sub Form is called DictionaryMain_Query_SubForm.
> 
> So far, the filter button "cmdFilter" is working. Does the reset button 
> "cmdReset" allow me to clear the words inside the unbound text box and go 
> back to the original main form before filtering using a sub form approach?
> Because if I juse just a main form, the reset button "cmdReset" just does 
> clear the words inside the unbound text box and go back to the original main 
> form before filtering.
0
Reply Steve 3/13/2008 9:53:52 PM

Hello Steve:

Wow, it is now working the way I wanted. Thank you so much!!
Even though my sub form name is DictionaryMain_Query_SubForm, for some 
reason the sub form property under the main form is named as Child19. I don't 
rememer changing it. Maybe when I was reading and following the tutorial 
somewhere I must have mixed up.
Anyway, my form is working. Once again, I sincerely appreciate your time and 
great support!!

With best regards,
Hiro Shiratori

"Steve Schapel" wrote:

> Hiro,
> 
> Ok, I think I understand.  I think your code needs to be like this:
> 
> Private Sub cmdReset_Click()
>     Me.FindWord = Null
>     With Me.DictionaryMain_Query_SubForm.Form
>        .Filter = ""
>        .FilterOn = False
>     End With
> End Sub
> 
> Let us know if it is still not doing what you want.
> 
> -- 
> Steve Schapel, Microsoft Access MVP
> 
> Hiro wrote:
> > Hello Steve:
> > 
> > Once again, thank you for your continued follow-up.
> > * Main Form is called DictionaryMain_Query.
> > On the form header of the main form, I have placed an unbound text box 
> > "FindWord", a filter button "cmdFilter" and a reset button "cmdReset".
> > * Sub Form is called DictionaryMain_Query_SubForm.
> > 
> > So far, the filter button "cmdFilter" is working. Does the reset button 
> > "cmdReset" allow me to clear the words inside the unbound text box and go 
> > back to the original main form before filtering using a sub form approach?
> > Because if I juse just a main form, the reset button "cmdReset" just does 
> > clear the words inside the unbound text box and go back to the original main 
> > form before filtering.
> 
0
Reply Utf 3/14/2008 4:57:01 PM

Hiro,

I am very happy to hear that this is working for you now.

When you have a subform, there are two names involved.  There is the 
name of the form that is used as the subform, and there is the name of 
the subform control on the main form.  Sometimes these names are the 
same as each other, sometimes not, depending on the way in which you 
embedded the subform onto the main form.  In your code, you need to use 
the name of the subform control on the main form.

-- 
Steve Schapel, Microsoft Access MVP

Hiro wrote:
> Hello Steve:
> 
> Wow, it is now working the way I wanted. Thank you so much!!
> Even though my sub form name is DictionaryMain_Query_SubForm, for some 
> reason the sub form property under the main form is named as Child19. I don't 
> rememer changing it. Maybe when I was reading and following the tutorial 
> somewhere I must have mixed up.
> Anyway, my form is working. Once again, I sincerely appreciate your time and 
> great support!!
> 
0
Reply Steve 3/14/2008 6:19:01 PM

9 Replies
732 Views

(page loaded in 0.179 seconds)


Reply: