How search for records based on a specified date range

SteveL13
SteveL13 used Ask the Experts™
on
I have several unbound field on a "Search Form".  I also have a command button in the footer of the form.  The onclick event of the command button currently has this code:

Dim s As String

    If Nz(Me.txtRecordID, "") <> "" Then
        s = s & " [RecordID] Like '*" & Me.txtRecordID & "*'"
    End If

    If Nz(Me.txtPRn, "") <> "" Then
        If Len(s) > 0 Then
            s = s & " AND "
        End If
        s = s & " [PRn] Like '*" & Me.txtPRn & "*'"
    End If

    If Nz(Me.txtSKUn, "") <> "" Then
        If Len(s) > 0 Then
            s = s & " AND "
        End If
        s = s & " [SKUn] Like '*" & Me.txtSKUn & "*'"
    End If

    If Nz(Me.txtRevisionDate, "") <> "" Then
        If Len(s) > 0 Then
            s = s & " AND "
        End If
        s = s & " [RevisionDate] Like '*" & Me.txtRevisionDate & "*'"
    End If

    If Len(s) > 0 Then
        s = "SELECT * FROM [tblRecords] WHERE " & s & " Order by [RecordID]"
    Else
        s = "SELECT * FROM [tblRecords] " & " Order by [RecordID]"
    End If

    DoCmd.OpenForm "frmRecordsHeader", acNormal, , , acFormReadOnly, acWindowNormal
    
    Forms!frmRecordsHeader.Form!subfrmRecordsDS.Form.RecordSource = s

Open in new window


But on the form I will have two date fields.  txtStartDate and txtEndDate.  So instead of this part of the code:

    If Nz(Me.txtRevisionDate, "") <> "" Then
        If Len(s) > 0 Then
            s = s & " AND "
        End If
        s = s & " [RevisionDate] Like '*" & Me.txtRevisionDate & "*'"
    End If

Open in new window


I want to search where RevisionDate is between txtStartDate and txtEndDate.  How would I handle this?  What would the code:

    If Nz(Me.txtRevisionDate, "") <> "" Then
        If Len(s) > 0 Then
            s = s & " AND "
        End If
        s = s & " [RevisionDate] Like '*" & Me.txtRevisionDate & "*'"
    End If

Open in new window


Be changed to?
Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®

Author

Commented:
I've tried this but it doesn't work:

    If Nz(Me.txtStartDate, "") <> "" And Nz(Me.txtEndDate, "") <> "" Then
        If Len(s) > 0 Then
            s = s & " AND "
        End If
        s = s & " [RevisionDate] BETWEEN # & [txtStartDate] & # AND # & [txtEndDate] & #"
        
    End If

Open in new window

Dale FyeOwner, Dev-Soln LLC
Most Valuable Expert 2014
Top Expert 2010

Commented:
    If Nz(Me.txtStartDate, "") <> "" Then
        If Len(s) > 0 Then s = s & " AND "
        s = s & "([RevisionDate] >=  #" & Me.txtStartDate & "#)"
    End If

'I use the following syntax to make certain that if the RevisionDate field contains a time
'component, then all of the records pertaining to that date are included in the results.
    If Nz(Me.txtEndDate, "") <> "" Then
        If Len(s) > 0 Then s = s & " AND "
        s = s & "([RevisionDate] <  #" & DateAdd("d", 1, Me.txtEndDate) & "#)"
    End If

Open in new window

Author

Commented:
Dale,  Your suggested code doesn't seem to be working.  I'm getting no records when I click the command button
Ensure you’re charging the right price for your IT

Do you wonder if your IT business is truly profitable or if you should raise your prices? Learn how to calculate your overhead burden using our free interactive tool and use it to determine the right price for your IT services. Start calculating Now!

Most Valuable Expert 2015
Distinguished Expert 2018

Commented:
You just miss some quotes and - to play safe - to apply a forced format of the date expressions:

s = s & " [RevisionDate] BETWEEN #" & Format([txtStartDate], "yyyy\/mm\/dd") & "# AND #" & Format([txtEndDate], "yyyy\/mm\/dd") & "#"

Open in new window

/gustav

Author

Commented:
Still getting no re3cords with:

    If Nz(Me.txtStartDate, "") <> "" Then
        If Len(s) > 0 Then s = s & " AND "
        s = s & "([RevisionDate] >=  #" & Me.txtStartDate & "#)"
    End If

    If Nz(Me.txtEndDate, "") <> "" Then
        If Len(s) > 0 Then s = s & " AND "
        s = s & " [RevisionDate] BETWEEN #" & Format([txtStartDate], "yyyy\/mm\/dd") & "# AND #" & Format([txtEndDate], "yyyy\/mm\/dd") & "#"
    End If

Open in new window

Author

Commented:
Just for kicks I put this after the last line:

MsgBox s

And got:

msgbox

Author

Commented:
When I entered 9/6/2005 and 4/11/2007
Dale FyeOwner, Dev-Soln LLC
Most Valuable Expert 2014
Top Expert 2010

Commented:
you need to remove the first set of code

    If Nz(Me.txtRevisionDate, "") <> "" Then
        If Len(s) > 0 Then
            s = s & " AND "
        End If
        s = s & " [RevisionDate] Like '*" & Me.txtRevisionDate & "*'"
    End If

get rid of that and just use the code for txtStartDate and txtEndDate

Author

Commented:
Still no records with:  (Note I changed the formatting because I thought that might be the issue.  It didn't work either way)

    If Nz(Me.txtEndDate, "") <> "" Then
        If Len(s) > 0 Then s = s & " AND "
'        s = s & " [RevisionDate] BETWEEN #" & Format([txtStartDate], "yyyy\/mm\/dd") & "# AND #" & Format([txtEndDate], "yyyy\/mm\/dd") & "#"
        
        
        s = s & " [RevisionDate] BETWEEN #" & Format([txtStartDate], "mm\/dd\/yyyy") & "# AND #" & Format([txtEndDate], "mm\/dd\/yyyy") & "#"
        
    End If

Open in new window

Most Valuable Expert 2015
Distinguished Expert 2018

Commented:
Your message clearly shows your error.
I assumed your second code, thus:

If Nz(Me.txtStartDate, "") <> "" And Nz(Me.txtEndDate, "") <> "" Then
    If Len(s) > 0 Then
        s = s & " AND "
    End If
    s = s & " [RevisionDate] BETWEEN #" & Format([txtStartDate], "yyyy\/mm\/dd") & "# AND #" & Format([txtEndDate], "yyyy\/mm\/dd") & "#"
End If

Open in new window

/gustav

Author

Commented:
I don't know what I'm doing wrong.  Please see attached test file.  Enter 9/6/2005 and 4/11/2007 in the bottom two fields.  Then click [Search].  Nothing shows up in the results form.  Two records should show up.
Date-Range-Test.accdb
Most Valuable Expert 2015
Distinguished Expert 2018
Commented:
The query (SQL) is correct, but you do some very weird things with this setup of a parent and a child form - a lot of DLookups etc.
So this is where to look for the error(s).
You may have to redesign it from scratch bit for bit.

/gustav

Author

Commented:
Redesigned the forms and used your latest code.  All is well.  Thank you.
Most Valuable Expert 2015
Distinguished Expert 2018

Commented:
You are welcome!

/gustav

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial