Solved

Open query based on currently filtered form - Access 2007

Posted on 2008-06-23
21
618 Views
Last Modified: 2013-11-29
Hello,
I am trying to integrate a mail merge function with Acces 2007.  I want my users to be able to narrow the list of contacts that will recieve an email by filtering fields on a form.  Once the user filters the form, they would click an email button that would start the mail merge wizard.  Inside the mail merge wizard, the user has to choose a table or query to get the data from.  My question is this - how do I base a query on an open form's filtered records?
Thanks
0
Comment
Question by:Clean14
  • 11
  • 10
21 Comments
 
LVL 119

Expert Comment

by:Rey Obrero
ID: 21849592
get the form's filter and apply it to the query..

dim  qd as dao.querydef, ssql as string


qd=currentdb.querydef("nameOfQuery")
ssql=qd.sql

ssql=ssql & " where " & me.filter

qd.sql=ssql
0
 
LVL 119

Expert Comment

by:Rey Obrero
ID: 21849620
or better set a general query string

dim genSql,qd as dao.querydef, ssql as string
genSql="select * from tablex"

qd=currentdb.querydef("nameOfQuery")

qd.sql=genSql & " where " & me.filter
0
 

Author Comment

by:Clean14
ID: 21849692
Thanks for the quick response.  Where would I place the code that you supplied?
Thanks
0
 
LVL 119

Expert Comment

by:Rey Obrero
ID: 21849997
let me ask the question-- where do you want the data from the query?
0
 

Author Comment

by:Clean14
ID: 21850092
The mail merge wizard will be accessing the query.  I just want the query to always reflect the records that are filtered on my main form.  The main form will be open when the mail merge wizard looks for the mail merge query.  I hope that makes sense.
0
 
LVL 119

Expert Comment

by:Rey Obrero
ID: 21850145
then apply the filter to the query before you do the mail merge
0
 

Author Comment

by:Clean14
ID: 21850249
I know how to apply a filter to a query....what i am trying to do is have the query look at the open form, and copy the form's current filters automatically.  Is that possible?  
0
 
LVL 119

Expert Comment

by:Rey Obrero
ID: 21850514

create a button in your form cmdTest

filter the form before you click the button

in the click event of cmdTest

private sub cmdtest_click()
dim genSql,qd as dao.querydef, ssql as string
genSql="select * from tablex"     'change { tablex } with the actual name of the table

qd=currentdb.querydef("nameOfQuery")  'change "nameOfQuery" with the name of the query

qd.sql=genSql & " where " & me.filter

docmd.openquery "nameOfQuery"

end sub
0
 

Author Comment

by:Clean14
ID: 21855864
I tried your last suggestion, and when I click the button, I get an error message - "compile error - method or data member not found" I've attached the file for your reference.  Thanks for your help!
0
 
LVL 119

Expert Comment

by:Rey Obrero
ID: 21855890
where is the file?
0
Backup Your Microsoft Windows Server®

Backup all your Microsoft Windows Server – on-premises, in remote locations, in private and hybrid clouds. Your entire Windows Server will be backed up in one easy step with patented, block-level disk imaging. We achieve RTOs (recovery time objectives) as low as 15 seconds.

 

Author Comment

by:Clean14
ID: 21856052
Sorry about that.  It wouldn't let me attach the .accdb file, so I just changed it to .mdb.  Thanks.
test.mdb
0
 
LVL 119

Expert Comment

by:Rey Obrero
ID: 21856232
try this codes

Private Sub cmdtest_click()
Dim genSql, qd As DAO.QueryDef, ssql As String
genSql = "select * from Executives"  

Set qd = CurrentDb.QueryDefs("Query1")

qd.SQL = genSql & " where " & Me.Filter

DoCmd.OpenQuery "Query1"

End Sub

0
 

Author Comment

by:Clean14
ID: 21856343
Almost there!  The code worked except for 1 thing.  If I don't filter any records, the query still opens with the last filtered criteria.  Is there a way to empty the filter from the query when it is closed?  Thanks!
0
 
LVL 119

Accepted Solution

by:
Rey Obrero earned 500 total points
ID: 21856391

Private Sub cmdtest_click()
Dim genSql, qd As DAO.QueryDef, ssql As String
genSql = "select * from Executives"  

Set qd = CurrentDb.QueryDefs("Query1")

if len(me.filter)>0 then
qd.SQL = genSql & " where " & Me.Filter
else
qd.SQL = genSql
end if

DoCmd.OpenQuery "Query1"

End Sub
0
 

Author Comment

by:Clean14
ID: 21856527
I tried that code, but I have the same problem.  Query loads with last filtered criteria.  Thanks
0
 
LVL 119

Expert Comment

by:Rey Obrero
ID: 21856586
Clean14, did you remove the filter in the form before you open the query?
0
 

Author Comment

by:Clean14
ID: 21856689
I removed the filter by pressing the filtered / unfiltered button on the bottom of the form.  Here is the file again in case you want to try.  Thanks
test.mdb
0
 
LVL 119

Expert Comment

by:Rey Obrero
ID: 21856778
click the remove filter button before opening the query
test.mdb
0
 

Author Comment

by:Clean14
ID: 21856907
Thanks a lot for all your help.   I'm new to this site....does it matter which one of your comments I accept as the solution?  
0
 
LVL 119

Expert Comment

by:Rey Obrero
ID: 21856961
just select the more appropriate one
0
 

Author Closing Comment

by:Clean14
ID: 31469908
Thanks again for all yoru help.  You saved me TONS of time and frustration.  
Pat
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

Suggested Solutions

In Debugging – Part 1, you learned the basics of the debugging process. You learned how to avoid bugs, as well as how to utilize the Immediate window in the debugging process. This article takes things to the next level by showing you how you can us…
A simple tool to export all objects of two Access files as text and compare it with Meld, a free diff tool.
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…
In Microsoft Access, learn different ways of passing a string value within a string argument. Also learn what a “Type Mis-match” error is about.

867 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

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now