Remove Enter Parameter Value - ms-access

I'm trying to calculate the time difference between two variables. The first variable is checkin_time and the second variable is triage_time. Both variables contain values with the same format, for example... 12/31/2018 3:24:00 PM.
So in theory I would be subtracting Checkin_time (12/31/2018 3:24:00 PM) from Triage_time (12/31/2018 4:24:00 PM) to get 60 minutes.
I'm using the following code to calculate the time difference
Select DateDiff(Minute,CHECKIN_TIME,triage_time) AS triagetime
From TAT_Import
but when executing this query I'm getting an 'enter paramteer value' pop up box and it's asking me to enter a value for minutes.
How do I run my query without having to enter a value for minutes in the pop up box?
Thanks!

The DateDiff function requires a string as the first argument, hence your code should be:
select DateDiff("n", CHECKIN_TIME, triage_time) AS triagetime
from TAT_Import

Related

SSRS - How to AVG then format a number

I'm trying to get the average handle time per call to display as HH:MM:SS.
What I can't seem to figure out is how to take the AVG(Field) and make it HH:MM:SS. I can either A) avg and get the a decimal number which represents seconds or format total seconds for all calls in HH:MM:SS. but can't seem to marry the two. I'm sure it's simple but can't find anything on here that works.
This was one of my attempts that didn't work. "=Format(Avg(Fields!AHT.Value), 'HH:MM:SS')"
Any help would be greatly appreciated!
You should be able to do something like ...
=DATEADD(DateInterval.Second, AVG(Fields!AHT.Value), Today())
then format this textbox as Time in the textbox properties, under 'Number' or use the format code T
This gives this result..
All the expression does is take Today() which is only the date (therefore the time is 00:00:00) and then add the average number of seconds to it. So the actual result is today's date plus the time we want. Then format the textbox as time only, to hide the date portion.

Can you set a parameter that references an expression field that is calculated based on another parameter selection?

I am attempting to create a parameter which looks at the values of a field in the report which is calculated based on the entry of another parameter.
Specifically, the first parameter is a number option (30,60 or 90) and the field expression is a DATEADD that adds the parameter value to the value of a date field.
The next parameter I need is to pick dates in the "expression field" that fall into a certain range. i.e. user chooses 30 so the report generates and populates the "Hire Date" + 30.
I want to then only select the records where that new date falls into a specified range i.e. Effective Date 2/1/2020-2/29/2020. I have been looking everywhere, but cannot find an answer and I don't know if it is possible.
Results example
[EffDate Field[\]\[1\]][1]
I think this was what SuperSimmer 44 was referring to that I couldn't understand before.
I added the following parameters:
Wait - which is an integer & has set available values of 30, 60 & 90
From - Date
To - Date
I kept the field "Effective Date" in my report which was the expression =DateAdd("d",Parameters!wait.Value,Fields!HireDate.Value)
I then added a filter to the Dataset that said if the value of the expression =DateAdd("d",Parameters!wait.Value,Fields!HireDate.Value) was between #from & #to then they should include the record in the results. It worked perfectly.
Report Sample
Insert 2 parameters, one called qty to hold available values from a list 30/60/90 or 120 etc
the other called date to hold your from effective date.
Set up a calculated field in your dataset called effectivedate that utilised DateAdd, for example ie: =DateAdd("d",Parameters!qty.Value,Parameters!effectivedate.Value)
Then set a filter on your dataset that utilizes this calculated field.

Interesting SSRS parameter discovery when using subscriptions

I have recently been putting together an SSRS report that will run every 15 minutes for the previous 15 minute 'chunk' of time. In essence a very straight forward and simple report that will run via an automated subscription.
I was using Microsoft SQL Server 12 Report Builder Version 3.
I was alerted to an issue with the output csv when my recipient reported being sent blank files, most odd considering the report generated as expected when run manually.
Long story short, it was the expressions I was using to generate the From and To dates. Manual runs produced data, subscription runs did not.
Original parameters
FromDate
dateadd(DateInterval.Second, (second(now()) + 900) * -1, dateadd(Dateinterval.Minute, (minute(now()) mod 15) * -1, now()))
ToDate
dateadd(DateInterval.Second, (second(now()) + 1) * -1, dateadd(Dateinterval.Minute, (minute(now()) mod 15) * -1, now()))
New Parameters
FromDate
dateadd(DateInterval.Minute, -15, dateadd(DateInterval.Minute, cint(datediff(DateInterval.Minute,today(),now()) / 15) * 15, today()))
ToDate
dateadd(DateInterval.Second, 899,Parameters!FromDate.Value)
Thought I would post this here for two reasons
Theories as to why
It might help someone in the future
Your original parameters take Now and subtract the minutes to arrive at a 15-minutes time, then they take the seconds of another Now (which is later and could be in the next second or even minute) and subtract that value to arrive at a 0-second time (or a 59-second time). This could already cause a problem when there is a change of seconds between the first and the second Now, which isn't very unikely, as on my test system there were 0.59 seconds between the two evaluations of Now in the FromDate parameter. Also, the Now value is more accurate than just a second, and your formula does not respect that. Therefore, if the records you are trying to process in your report happen to have a time of exactly a quarter of an hour, the first parameter is for sure greater (by maybe 0.01 second) and so the record is ignored.
Your formula for the "new parameters" does not depend on the seconds of Now() and will always return a time with no fraction of a second, so I guess that that's what makes the difference.
The expression for the FromDate could be simplified a little:
=Today.AddSeconds(900*(DateDiff(DateInterval.Minute, Today, Now)\15-1))
If you do not plan to run the report very short before midnight, there should not be a problem caused by a change of the day during the evaluation of Today and Now, and you could calculate the second parameter in a similar way, independently from the first one:
=Today.AddSeconds(900*(DateDiff(DateInterval.Minute, Today, Now)\15)-1)
The original parameter values were being calculated individually which means they would each have slightly different values for Now(). I know this is a long shot, but it's a theory. If the subscription job fired off a fraction of a second before a 15 minute interval, it's possible that the ToDate returned just before the FromDate. This would result in an invalid date range.
With the new expressions, the ToDate is referencing the FromDate which forces them to be calculated in sequence, not in parallel. Not to mention you're adding to the FromDate which also forces the date range to have a consistent length. However, you may still run into a case where you get the same report twice if the FromDate is calculated on the wrong side of a 15 minute cutoff.
One way to test/avoid this issue would be to offset the subscription time so that it doesn't actually try to fire at the exact 15 minute cutoffs. For example, you could have it scheduled to go off 1 minute afterwards.

Calculating days between dates and parameters in MS Access

I'm trying to write a query that allows me to get records for all users whose items are more than X number of days overdue. I want to be able to specify whether that number be 30 or 40 or 50. I am able to get the results I need when I specify a specific number in the sql query:
SELECT USER_TRANSACTIONS.PATRON_ID, USER_TRANSACTIONS.CURRENT_DUE_DATE,
DateDiff("d",USER_TRANSACTIONS.CURRENT_DUE_DATE,Date()) AS Expr1
FROM USER_TRANSACTIONS
WHERE (DateDiff("d", USER_TRANSACTIONS.CURRENT_DUE_DATE, Date()))>50
However, when I try to use a parameter in place of the number, 50. And then type in the number 50 when I run the query and am prompted
SELECT USER_TRANSACTIONS.PATRON_ID,USER_TRANSACTIONS.CURRENT_DUE_DATE,
DateDiff("d",USER_TRANSACTIONS.CURRENT_DUE_DATE,Date()) AS Expr1
FROM USER_TRANSACTIONS
WHERE (DateDiff("d", USER_TRANSACTIONS.CURRENT_DUE_DATE, Date()))>[MinimumNumDays]
The query gives me everything instead of limiting the records to those overdue by more than 50 days. What am I missing??
You will need to add [MinimumNumDays] as an Integer query parameter. (Click [?] Parameters on the upper right the query builder)
if you are running this query from a form you can add an unbouand text box to the form. Enter the number of days in this. In query definition right click on in the criteria row for Expr1 and select build, locate your text box in
forms -> Loaded Forms -> your form
double click on it and click OK

VBA text box input mask

I have two validation for date and time as below in text boxes:
00/00\ 00:00;0;0;_
It will take (dd/mm hh:mm) and works fine
But sometimes i put
34/34 56:78 it will take , But it shouldn't
Date sholdnot go beyond 31, month 12 time 24 and minute 59
Please help
I just encountered this problem with a Credit Card expiration date field yesterday. I'd stupidly changed 00/0000 as input mask to 00/00, and encountered the problem you're having. the issue is that if the second pair of digits is a valid date, it will be interpreted as a date and the current year will be supplied tacitly. Thus, if you enter:
06/09
for Jun 2009, it will be stored as:
06/09/2009
On the other hand, if you enter:
06/34
it will be interpreted as
06/01/1934
So far as I can see, the only way for you to do what you want is to use a 4-digit year.
validate the date using IsDate()
Public Function ValidateDate(input As String) As Boolean
ValidateDate = IsDate(input)
End Function
this returns a boolean value, True if the input is a valid date string, False if it isn't. The maximum values are
Day: 31
Month: 12
Hour: 23
Min: 59
Sec: 59
Input masks in Access cannot be restricted to ranges of values, like with a RegExp. Only way to do this is use some validation (which can be done on a keypress if you want to).
Approach the problem differently. Give the user a calendar to pick from. You could use something like Allen Browne's Popup Calendar
Disable and lock the text field and you can guarantee that the format is correct.