Solved

Filter a subform from the main form

Posted on 2008-10-12
16
587 Views
Last Modified: 2013-11-28
Hi,

I have form with a few search text boxes on.  Also on the form is a sub form (frm_Contacts_Sub) which is a contiuous form with tbl_contacts as it record source.  I have used a continuous form instead of a list box as i need to allow the user to select a contact using a tick box on each record.

My question is how do i filter the sub form from my text boxes from the main form.  I have some code which i am using however, when i begin typing in the search text box is always returns the same one result regardless what i type.

Tom
Private Sub SearchText_Change()
Dim SQL As String
 
SQL = " SELECT * FROM tbl_Contacts Where [company_name] Like '*" & Me.SearchText.Text & "*'"
Me![frm_contacts_sub].Form.RecordSource = SQL
End Sub

Open in new window

0
Comment
Question by:d10u4v
  • 7
  • 7
  • 2
16 Comments
 
LVL 27

Assisted Solution

by:MikeToole
MikeToole earned 200 total points
ID: 22697090
There's no need to replace the SQL, just set a filter.
This certainly works for me:

Private Sub Text0_Change()
    With Me![Customers subform].Form
        .Filter = "[Job Title] Like '*" & Me.Text0.Text & "*'"
        .FilterOn = True
    End With
End Sub
0
 
LVL 27

Expert Comment

by:MikeToole
ID: 22697103
Having said that that, the Recordsource method works too - at the cost of a requery for every character you type. The filter will probably perform better.
Private Sub Text0_Change()
    With Me![Customers subform].Form
'        .Filter = "[Job Title] Like '*" & Me.Text0.Text & "*'"
'        .FilterOn = True
        .RecordSource = "select * from customers where [Job Title] Like '*" & Me.Text0.Text & "*'"
    End With
End Sub
0
 

Author Comment

by:d10u4v
ID: 22697206
Thanks,

I can't seem to get the RecordSeouce method to work, but the filter is working great.  I'm currently testing different seach methods in Access and have a few ideas which i'm not sure are ok.

Could i use the same filter method, but time it would filter the table directly and copy the returned data to another table which would them be used to populate a list box or continuous form.  The reason being the user could then build up a table of search results which they could use to run a mail merge or print of a report.  Once the search form is closed the tble would be cleared ready for a new search.

Tom
0
Simplifying Server Workload Migrations

This use case outlines the migration challenges that organizations face and how the Acronis AnyData Engine supports physical-to-physical (P2P), physical-to-virtual (P2V), virtual to physical (V2P), and cross-virtual (V2V) migration scenarios to address these challenges.

 
LVL 120

Expert Comment

by:Rey Obrero (Capricorn1)
ID: 22698115
try

Private Sub Text0_Change()
dim str
str=str & me.text0.text
    With Me![Customers subform].Form
'        .Filter = "[Job Title] Like '*" & str & "*'"
'        .FilterOn = True
        .RecordSource = "select * from customers where [Job Title] Like '*" & str & "*'"
    End With
End Sub
0
 
LVL 120

Accepted Solution

by:
Rey Obrero (Capricorn1) earned 300 total points
ID: 22698124

Private Sub Text0_Change()
dim str
str=str & me.text0.text
    With Me![Customers subform].Form
'        .Filter = "[Job Title] Like '*" & str & "*'"
'        .FilterOn = True
        .RecordSource = "select * from customers where [Job Title] Like '*" & str & "*'"
        .requery
    End With
End Sub
0
 

Author Comment

by:d10u4v
ID: 22698136
Hi,  Thanks for that Capricorn1, i'll have a look at that.

How would i also send the 'filtered' data to a new table (tbl_search_results)?  I need to have the table already setup and just append data to it, not have the table created each time.

Tom
0
 
LVL 120

Expert Comment

by:Rey Obrero (Capricorn1)
ID: 22698162
one at a time...
0
 

Author Comment

by:d10u4v
ID: 22698305
I had this, but it would either create a new table each time or error out Runtime Error 3010 because the table already existed.

Tom
strSQL = "SELECT * INSERT INTO tbl_search_results From tbl_Contacts WHERE [company_name] Like '*" & Me.SearchText.Text & "*'"
 
db.Execute strSQL

Open in new window

0
 

Author Comment

by:d10u4v
ID: 22698328
Hi

I have just tried your example using [.RecordSource = "select * from customers where [Job Title] Like '*" & str & "*'"] and i get the same out come as before.

When i enter a seach criteria it returns only one result regardless what i enter.  The filter works fine. but using the recordsource option doesn't.

Tom
0
 
LVL 120

Expert Comment

by:Rey Obrero (Capricorn1)
ID: 22698383
are you using the filter and the recordsource simultaneously?
0
 

Author Comment

by:d10u4v
ID: 22698393
No,  I have been trying either or.
0
 
LVL 120

Expert Comment

by:Rey Obrero (Capricorn1)
ID: 22698469


Private Sub Text0_Change()
dim str
str=str & me.text0.text
    With Me![Customers subform].Form
        ' clear the filter
        .filter=""

        .RecordSource = "select * from customers where [Job Title] Like '*" & str & "*'"
        .requery
    End With
End Sub
0
 

Author Comment

by:d10u4v
ID: 22698511
Still the same thing is happening.  Regardless what i type in the search i get the same result.  It is always "Archive Test Company" Even if i just type a 'B' in the search field i get that result.

Tom
0
 
LVL 120

Expert Comment

by:Rey Obrero (Capricorn1)
ID: 22698533
do a compact and repair

do a DEBUG>Compile
correct any error that will be raised.

....

try decompiling your db

http://www.granite.ab.ca/access/decompile.htm

if problem persists
your form could be corrupted..


create a new form and subform

and use the codes above
0
 

Author Comment

by:d10u4v
ID: 22698692
It must be becuase its a Sunday and i said that i wanted to get this done by tomorrow...

For some reason my 'unbound' form was bound to the tbl_contacts table!  That is what was causing the strange search results.  It is working ok now.

I now need to look at copying the returned results into another table.

Tom
0
 
LVL 120

Expert Comment

by:Rey Obrero (Capricorn1)
ID: 22698752
strSQL = "INSERT INTO tbl_search_results SELECT *  From tbl_Contacts WHERE [company_name] Like '*" & str & "*'"
 
db.Execute strSQL
0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

'Between' is such a common word we rarely think about it but in SQL it has a very specific definition we should be aware of. While most database vendors will have their own unique phrases to describe it (see references at end) the concept in common …
Confronted with some SQL you don't know can be a daunting task. It can be even more daunting if that SQL carries some of the old secret codes used in the Ye Olde query syntax, such as: (+)     as used in Oracle;     *=     =*    as used in Sybase …
Using Microsoft Access, learn some simple rules for how to construct tables in a relational database. Split up all multi-value fields into single values: Split up fields that belong to other things into separate tables: Make sure that all record…
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…

820 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question