In order to avoid duplicating code I've tried to use a function in a module instead of a sub related to a form. The sub was already made by somebody else, I just have to make some minor alterations to get it to work properly as a function. Doing so I got stuck on something very simple, and sadly I have not been able to find the solution elsewhere.
In this function I would like to open a query which is in my database as a string, since additional filters will be added to the query before it is executed. How should I open this query?
The code as it was as a sub is shown below.
Private Sub Unhide_Click()
Dim query_pre As String
Dim whereStr As String
whereStr = " (AND ((IIF(IsNull([Actions complete].OTL_man), ([Actions complete].ATL_man) < DateAdd('m', 6, Date()),
([Actions complete].OTL_man) < DateAdd('m', 6, Date())))" & _
" AND (([Actions complete].Finished) Is Null)))"
owner_id = Nz(DLookup("ID", "Owners", "[Full Name] like '*" & prefilter.Value & "*' "), -1)
sender_id = Nz(DLookup("ID", "Senders", "[Sender] like '*" & prefilter.Value & "*' "), -1)
query_pre = " [Actions complete].[Ref_man] Like '*" & prefilter.Value & "*'" & _
" OR [Actions complete].[owner_man] = " & owner_id & _
" OR [Actions complete].[action_man] Like '*" & prefilter.Value & "*'" & _
" OR [Actions complete].[Sender_man] = " & sender_id & _
" OR [Actions complete].[ATL_man] Like '*" & prefilter.Value & "*'" & _
" OR [Actions complete].[OTL_man] Like '*" & prefilter.Value & "*'" & _
" OR [Actions complete].[finished] Like '*" & prefilter.Value & "*' "
final_query2 = "SELECT [Actions complete].* FROM [Actions complete] WHERE (( " & query_pre & " ) " & whereStr & ") ORDER BY [OTL_man] ASC "
final_query3 = "SELECT [Actions complete].* FROM [Actions complete] WHERE ( " & query_pre & " ) ORDER BY [OTL_man] ASC"
If Unhide.Value = True And CurrentDb.OpenRecordset(final_query3).RecordCount <> 0 Then
Me.RecordSource = final_query3
ElseIf Unhide.Value = False And CurrentDb.OpenRecordset(final_query2).RecordCount <> 0 Then
Me.RecordSource = final_query2
Else
MsgBox "There are no records matching the filter criteria. The filter was ignored"
End If
End Sub
Now I want to change this code so that what was the "Actions complete" can be variable depending on the situation. Therefore I transferred to to a function, as said to avoid duplicating code.
Function mail_filter(Past_unhide As Boolean, Inactive_unhide As Boolean)
Dim query_pre As String
Dim where As String
Dim Relevant_Query As String
If Inactive_unhide = False Then
Relevant_Query = DoCmd.OpenQuery "[Actions complete]" 'This is where i am stuck right now
Else
Relevant_Query = DoCmd.OpenQuery([Actions complete with inactive]) 'This is where i am stuck right now
End If
where = "AND (( IIF(isnull([Relevant_Query].OTL_man), ([Relevant_Query].ATL_man)<DateAdd('m',6,Date()) ,([Relevant_Query].OTL_man)<DateAdd('m',6,Date()) ) ) AND (([Relevant_Query].Finished) Is Null)) "
query_pre = " "
owner_id = Nz(DLookup("ID", "Owners", "[Full Name] like '*" & prefilter.Value & "*' "), -1)
sender_id = Nz(DLookup("ID", "Senders", "[Sender] like '*" & prefilter.Value & "*' "), -1)
query_pre = " [Relevant_Query].[Ref_man] Like '*" & prefilter.Value & "*' OR [Relevant_Query].[owner_man] = " & owner_id & " OR [Relevant_Query].[action_man] Like '*" & prefilter.Value & "*' OR [Relevant_Query].[Sender_man] = " & sender_id & " OR [Relevant_Query].[ATL_man] Like '*" & prefilter.Value & "*' OR [Relevant_Query].[OTL_man] Like '*" & prefilter.Value & "*' OR [Relevant_Query].[finished] Like '*" & prefilter.Value & "*' "
final_query2 = "SELECT [Relevant_Query].* FROM [Relevant_Query] WHERE ( " & query_pre & " ) " & where & " ORDER BY [OTL_man] ASC"
final_query3 = "SELECT [Relevant_Query].* FROM [Relevant_Query] WHERE ( " & query_pre & " ) ORDER BY [OTL_man] ASC"
If Forms!mail_v3!Past_unhide.Value = True And CurrentDb.OpenRecordset(final_query3).RecordCount <> 0 Then
Forms!mail_v3.RecordSource = final_query3
ElseIf Forms!mail_v3!Past_unhide.Value = False And CurrentDb.OpenRecordset(final_query2).RecordCount <> 0 Then
Forms!mail_v3.RecordSource = final_query2
Else
MsgBox "There are no records matching the filter criteria. The filter was ignored"
End If
End Function
Somehow it is not clear to Acces what query I am trying to open. How should I do this?