Access report source with date range

I have a ACCESS 2010 subreport with the report source property something like:
Select * from tblNotes where NoteDate > getStartDate()

The function getStartDate() gets date from a form text box:
...
Public Function getWorkloadStartDate() As Date
    'function pair used in srptWorkload, srptCurrentBid etc  record source
    getWorkloadStartDate = Format(Forms!frmWorkLoadPrint_Option.dtpFrom.Value, "yyyy/mm/dd")
End Function

Open in new window


I have also tried ...

Public Function getWorkloadEndDate() As Date
    getWorkloadEndDate = Format(Forms!frmWorkLoadPrint_Option.dtpTo.Value, "yyyy/mm/dd")
End Function
Public Function getWorkloadStartDate2() As Date
    'function pair used in srptCurrentBid etc  record source
    getWorkloadStartDate2 = Format(Forms!frmWorkLoadPrint_Option.dtpFrom.Value, "\#yyyy\-mm\-dd\#")
End Function
Public Function getWorkloadEndDate2() As Date
    getWorkloadEndDate2 = FormatForms!frmWorkLoadPrint_Option.dtpTo.Value, "\#yyyy\-mm\-dd\#")
End Function


Public Function getdCutOffDate() As Date

    getdCutOffDate = CDate(dCutOffDate)
    
End Function

Open in new window


...

My report is almost correct, however one user has noted that it does not pick up one of his notes.  I did some testing and although it works perfectly for most notes, it has an issue with a few notes.
If I hard code the record source to be:
Select * from tblNotes where NoteDate > #20/02/2014#
it collects the correct number of notes, however, if the form textbox is 20/02/2014 it misses one or two notes.

If this was VBA know I could use :
"Select * from Notes where noteDate > #" & format(FromDate "yyyy/mm/dd") & "#"

but how do I replicate this in report record source property box?  (remember it is a SUB report, not a report, so I can't set me.recordsource using VBA on the report open event since master child won't work)

Please note I am in Australia where date format is dd/mm/yyyy, not mm/dd/yyyy.
Also note that I have used yyyy/mm/dd after testing dd/mm/yyyy and mm/dd/yyyy unsuccessfully.
I HATE working with dates!
MonkeyPieAsked:
Who is Participating?
 
Gustav BrockConnect With a Mentor CIOCommented:
Your original query is OK, but the function is not correct as Format returns a string. It shall read:
Public Function getWorkloadStartDate() As Date
    ' Function pair used in srptWorkload, srptCurrentBid etc. record source.
    getWorkloadStartDate = DateValue(Forms!frmWorkLoadPrint_Option!dtpFrom.Value)
End Function

Open in new window

/gustav
0
 
als315Connect With a Mentor Commented:
You should convert text field from form to Date with:
Datevalue(FormatForms!frmWorkLoadPrint_Option.dtpTo.Value)
Do not use # or Cdate if your date format is not mm/dd/yyyy
You can also use DateSerial function
0
 
MonkeyPieAuthor Commented:
Thanks ALS315 but that did not work.  It had exactly the same result as:
getWorkloadStartDate = Format(Forms!frmWorkLoadPrint_Option.dtpFrom.Value, "yyyy/mm/dd")

I also tried "dd/mm/yyyy" again just to check.  Also, only getting 55 out of the 56 notes it finds if I hard code in date.

I added some debug.print lines to check form date "01/03/2014" and resulting date from function (also "01/03/2014") which are both correct.

So, just to confirm if function returns 01/03/2014 as type DATE, this gives a different result to hardcoded record source:
Select * from xx where NoteDate > #01/03/2014#

- where I expect the result to be the same.
0
Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
MonkeyPieAuthor Commented:
I have done more testing and found this:

If I change the hardcoded recordsource to :

Select * from xx where NoteDate > #03/01/2014#
(switching dd/mm to mm/dd)
I then get the same BAD result as I get with my function.
So, it is obviously to do with swtiching mm and dd around, but I can't work out how to fix it!  Any ideas?
Can I say:
datevalue(format(NoteDate, "dd/mm/yyyy")) > datevalue(format(formDate, "dd/mm/yyyy")?

Seems overly complicated.
0
 
als315Commented:
Thanks, Gustav.
I hope sometime you will have time to write an article about date values in Access
0
 
Gustav BrockCIOCommented:
Yes, I've tried a couple of times but too much real work blocks.

/gustav
0
 
MonkeyPieAuthor Commented:
Thank you everyone.  Both DateSerial (yy, mm, dd)  and

DateValue(Forms!frmWorkLoadPrint_Option!dtpFrom.Value)

worked.
0
 
Gustav BrockCIOCommented:
You are welcome!

/gustav
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.

All Courses

From novice to tech pro — start learning today.