Solved

Recordsource Filter in Microsoft Access

Posted on 2014-02-23
6
1,050 Views
Last Modified: 2014-02-24
Hello Experts,
What am I doing wrong? I have a form that I want to filter the recordsource based on a control called "Constituency". The code that I am using first gave me a parameter request and after I modified it doesn't do anything. The problem I seem to be having is with strFilter. Is this enough information or do you need more?
Thanks!
Private Sub Constituency_AfterUpdate()
On Error Resume Next
Dim stFilterSQL As String
Dim strSQl As String
Me.RecordSource = strSQl
strFilter = Me.Constituency.Value


  If Me.Constituency.Value <> "" Then
  Me.lblFormTitle.Caption = strFilter & " Constituency"
  
  strSQl = "SELECT qryContactTrim.Contact" & vbCrLf
  strSQl = strSQl & "           , tblContacts.*" & vbCrLf
  strSQl = strSQl & "           , tblDetail.*" & vbCrLf
  strSQl = strSQl & "           , tblConstituency.Constituency" & vbCrLf
  strSQl = strSQl & "        FROM (tblContacts " & vbCrLf
  strSQl = strSQl & "  INNER JOIN qryContactTrim " & vbCrLf
  strSQl = strSQl & "          ON tblContacts.ContactID = qryContactTrim.ContactID) " & vbCrLf
  strSQl = strSQl & "  INNER JOIN (tblDetail " & vbCrLf
  strSQl = strSQl & "  INNER JOIN tblConstituency " & vbCrLf
  strSQl = strSQl & "          ON tblDetail.fk_ConstituencyID.Value = tblConstituency.ConstituencyID) " & vbCrLf
  strSQl = strSQl & "          ON tblContacts.ContactID = tblDetail.fk_ContactID" & vbCrLf
  strSQl = strSQl & "       WHERE (((tblConstituency.Constituency = '" & strFilter & vbCrLf
  strSQl = strSQl & "    ORDER BY tblContacts.ContactLastName;"
  
        
        Me.RecordSource = strSQl
        Me.Detail.Visible = True
        Me.Refresh
    Else
    Exit Sub
            
    End If
End Sub

Open in new window

0
Comment
Question by:hbatt
6 Comments
 
LVL 20

Expert Comment

by:clarkscott
ID: 39881842
Your strings are wrong.
strSQl = strSQl & "           , tblContacts.*" & vbCrLf

will look like this:   "       ,tblContact.*""

probably should code like this:
strSQl = strSQl & "           , tblContacts.*"


Now (I forget)... if quotes are required around the asterisk... then this is the code.

 strSQl = strSQl & "           , tblContacts." & chr(13) & "*" &  chr(13) & vbCrLf

I use the CHR(13) instead of "'" because the quotes around an apostrophe are too hard to view.

If an apostrophe I required around the asterisk - change the CHR(13) to  "'"  (that's quote - apostrophe - quote.

Here's what you do.  Put a code break on your line: Me.RecordSource = strSQl
In the immediate window... type     print strSQL.
Examine the results.   That's what you're trying to run.


PS.  You don't put a line feed at the end of each line.  You only do that for viewing (eyeball) purposes if creating a "view" or stored procedure in SQL.  The actual query doesn't require this.

Scott C
0
 
LVL 49

Expert Comment

by:Gustav Brock
ID: 39881855
It's the where-string:

strSQl & "       WHERE tblConstituency.Constituency = '" & strFilter & "'" & vbCrLf

/gustav
0
 
LVL 47

Accepted Solution

by:
Dale Fye (Access MVP) earned 500 total points
ID: 39882269
If all you want to do is "filter" the recordsource, then you don't need to rewrite the SQL, you simply need to filter the form.

Private Sub Constituency_AfterUpdate()
On Error Resume Next
Dim stFilterSQL As String

'if [Consitiuency] is numeric, use this
strFilter = "[Constituency] = " & Me.Constituency
'if string, use:
strFilter = "[Constituency] = " & chr$(34) & me.Constituency & chr$(34)

me.filter = strFilter
me.filteron = true

End Sub

Open in new window

BTW, although Access automatically creates controls with Name the same as the field that they are bound to.  It is normally a good idea to rename your controls, so that you know you are referring to a control, not a field name.

In this case:

strFilter = "[Constituency] = " & Me.Constituency

It looks like you are referring to a field in the form.  Normally with this kind of functionality, you would put an unbound textbox or combo in the form header and give it a name like: txt_Filter_Constituency or cbo_Filter_Constituency.  Then, the syntax would read:

strFilter = "[Constituency] = " & chr$(34) & Me.txt_Filter_Constituency & chr$ (34)
0
Ransomware-A Revenue Bonanza for Service Providers

Ransomware – malware that gets on your customers’ computers, encrypts their data, and extorts a hefty ransom for the decryption keys – is a surging new threat.  The purpose of this eBook is to educate the reader about ransomware attacks.

 

Author Comment

by:hbatt
ID: 39883820
To be more clear, the form that I am using has an unbound recordsource so that when it opens, nothing is displayed. The user can then create the recordsource using an after update event for the unbound cboconstituency control (changed name based on fyed's comment)  located in the form's header. I am still not getting what I am doing wrong. I don't get an error message-I just don't get anything. Here is the new code:
Private Sub cboConstituency_AfterUpdate()
On Error Resume Next
Dim stFilterSQL As String
Dim strSQl As String
Me.RecordSource = strSQl
strFilter = "[Constituency] = " & Chr$(34) & Me.cboConstituency & Chr$(34)

  If Me.cboConstituency.Value <> "" Then
  Me.lblFormTitle.Caption = strFilter & " Constituency"
  
  strSQl = "SELECT qryContactTrim.Contact" & vbCrLf
  strSQl = strSQl & "           , tblContacts.*" & vbCrLf
  strSQl = strSQl & "           , tblDetail.*" & vbCrLf
  strSQl = strSQl & "           , tblConstituency.Constituency" & vbCrLf
  strSQl = strSQl & "        FROM (tblContacts " & vbCrLf
  strSQl = strSQl & "  INNER JOIN qryContactTrim " & vbCrLf
  strSQl = strSQl & "          ON tblContacts.ContactID = qryContactTrim.ContactID) " & vbCrLf
  strSQl = strSQl & "  INNER JOIN (tblDetail " & vbCrLf
  strSQl = strSQl & "  INNER JOIN tblConstituency " & vbCrLf
  strSQl = strSQl & "          ON tblDetail.fk_ConstituencyID.Value = tblConstituency.ConstituencyID) " & vbCrLf
  strSQl = strSQl & "          ON tblContacts.ContactID = tblDetail.fk_ContactID" & vbCrLf
  strSQl = strSQl & "       WHERE (((tblConstituency.Constituency = '" & strFilter & "'" & vbCrLf
  strSQl = strSQl & "    ORDER BY tblContacts.ContactLastName;"
  
        
        Me.RecordSource = strSQl
        Me.Detail.Visible = True
        Me.FormFooter.Visible = True
        Me.Refresh
    Else
    Exit Sub
            
    End If
End Sub

Open in new window

0
 

Author Closing Comment

by:hbatt
ID: 39884322
So, I resisted my temptation to rewrite the SQL and am using an unbound combo box to filter the form. The only modification is that I have set the detail and footer to not visible until the combo has fired so that not everyone with a constituency is listed. Once again fyed's solution makes sense. What happened to the Capricorn1 moniker?
0
 
LVL 47

Expert Comment

by:Dale Fye (Access MVP)
ID: 39884484
You will see him listed as "Rey Obrero" now.  EE recently instituted a method to create an alias in your user profile.  Mine now reads: fyed (Dale Fye), Rey chose to drop Capricorn1 (at least for now).
0

Featured Post

Enterprise Mobility and BYOD For Dummies

Like “For Dummies” books, you can read this in whatever order you choose and learn about mobility and BYOD; and how to put a competitive mobile infrastructure in place. Developed for SMBs and large enterprises alike, you will find helpful use cases, planning, and implementation.

Question has a verified solution.

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

The first two articles in this short series — Using a Criteria Form to Filter Records (http://www.experts-exchange.com/A_6069.html) and Building a Custom Filter (http://www.experts-exchange.com/A_6070.html) — discuss in some detail how a form can be…
Introduction When developing Access applications, often we need to know whether an object exists.  This article presents a quick and reliable routine to determine if an object exists without that object being opened. If you wanted to inspect/ite…
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.
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…

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

21 Experts available now in Live!

Get 1:1 Help Now