• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1306
  • Last Modified:

Recordsource Filter in Microsoft Access

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
Harry Batt
Asked:
Harry Batt
1 Solution
 
clarkscottCommented:
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
 
Gustav BrockCIOCommented:
It's the where-string:

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

/gustav
0
 
Dale FyeCommented:
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
Get 10% Off Your First Squarespace Website

Ready to showcase your work, publish content or promote your business online? With Squarespace’s award-winning templates and 24/7 customer service, getting started is simple. Head to Squarespace.com and use offer code ‘EXPERTS’ to get 10% off your first purchase.

 
Harry BattDirector of DevelopmentAuthor Commented:
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
 
Harry BattDirector of DevelopmentAuthor Commented:
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
 
Dale FyeCommented:
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
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Easily Design & Build Your Next Website

Squarespace’s all-in-one platform gives you everything you need to express yourself creatively online, whether it is with a domain, website, or online store. Get started with your free trial today, and when ready, take 10% off your first purchase with offer code 'EXPERTS'.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now