Solved

Filter a subform from the main form

Posted on 2008-10-12
16
586 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
3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

 
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

Complete VMware vSphere® ESX(i) & Hyper-V Backup

Capture your entire system, including the host, with patented disk imaging integrated with VMware VADP / Microsoft VSS and RCT. RTOs is as low as 15 seconds with Acronis Active Restore™. You can enjoy unlimited P2V/V2V migrations from any source (even from a different hypervisor)

Question has a verified solution.

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

PL/SQL can be a very powerful tool for working directly with database tables. Being able to loop will allow you to perform more complex operations, but can be a little tricky to write correctly. This article will provide examples of basic loops alon…
Composite queries are used to retrieve the results from joining multiple queries after applying any filters. UNION, INTERSECT, MINUS, and UNION ALL are some of the operators used to get certain desired results.​
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…
In Microsoft Access, learn how to “cascade” or have the displayed data of one combo control depend upon what’s entered in another. Base the dependent combo on a query for its row source: Add a reference to the first combo on the form as criteria i…

777 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