Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 按月份分组报告上的MS Access筛选日期范围_Ms Access_Vba - Fatal编程技术网

Ms access 按月份分组报告上的MS Access筛选日期范围

Ms access 按月份分组报告上的MS Access筛选日期范围,ms-access,vba,Ms Access,Vba,我被一件可能很简单的事情难住了。我按月份对结果进行分组,并希望按日期范围进行筛选。我有一个分组查询,如下所示 PARAMETERS ShipDateStart DateTime, ShipDateEnd DateTime; SELECT Month([ORDERS].[ShipDate]) & '/01/' & Right(Year([orders].[ShipDate]),2) AS ShipDateName, Sum(IIf([ORDERS].[ShipDate]-IIf(I

我被一件可能很简单的事情难住了。我按月份对结果进行分组,并希望按日期范围进行筛选。我有一个分组查询,如下所示

PARAMETERS ShipDateStart DateTime, ShipDateEnd DateTime;
SELECT Month([ORDERS].[ShipDate]) & '/01/' & Right(Year([orders].[ShipDate]),2) AS ShipDateName, Sum(IIf([ORDERS].[ShipDate]-IIf(IsNull([ORDERS].[PromisedDate]),[ORDERS].[EstimatedDate],[ORDERS].[PromisedDate])<=0,1,0)) AS OnTimeYes, Sum(IIf([ORDERS].[ShipDate]-IIf(IsNull([ORDERS].[PromisedDate]),[ORDERS].[EstimatedDate],[ORDERS].[PromisedDate])>0,1,0)) AS OnTimeNo, Year([orders].[ShipDate]) AS ShipDateYear
FROM OrderLineStatus INNER JOIN (DEST INNER JOIN ORDERS ON DEST.DestID = ORDERS.DestID) ON OrderLineStatus.OrderLineStatusID = ORDERS.OrderLineStatusID
WHERE (((DEST.Destination)<>"Purchased" And (DEST.Destination)<>"STOCKED") AND ((OrderLineStatus.OrderLineStatus)="Shipped") AND ((ORDERS.PromisedDate) Is Not Null) AND ((ORDERS.ShipDate) Between [ShipDateStart] And [ShipDateEnd]))
GROUP BY Month([ORDERS].[ShipDate]) & '/01/' & Right(Year([orders].[ShipDate]),2), Year([orders].[ShipDate]), Month([ORDERS].[ShipDate])
ORDER BY Year([orders].[ShipDate]), Month([ORDERS].[ShipDate]);

表单上有两个日期控件和一个运行此代码的按钮。如何做到这一点?

在打开报告之前,使用
DoCmd.SetParameter
设置参数:

DoCmd.SetParameter“ShipDateStart”、“#”和格式(CDate(Me.StartDateBox)、“mm/dd/yyyy”)和“#”
DoCmd.SetParameter“ShipDateEnd”,“#”和格式(CDate(Me.EndDateBox),“mm/dd/yyyy”)和“23:59#”
DoCmd.OpenReport stDocName,acPreview,,acWindowNormal

这是一个正确的步骤,因为它不会弹出询问参数,但返回时没有结果。我在报告参数值中手动输入相同的值,它工作正常,所以我不知道出了什么问题。表单控件检索日期,CDate工作,但似乎SetParameter输入了Null。显然,Access在使用
DoCmd.SetParameter
和日期参数时会进行一些奇怪的类型转换。当前编辑应该可以工作。就是这样!我认为CDate将其转换为一个日期,使得“#”前缀/后缀多余(或者可能会有问题,因为它可能会变成“##”前缀/后缀)。哦,好吧。如果它没有坏,就不要修复它。好吧,这也是我出错的地方,但显然,
DoCmd.SetParameter
接受一个SQL表达式字符串,所以你的日期被转换回一个字符串(你可以在SQL语句中键入的东西),然后将日期转换成这个字符串,效果很奇怪。例如,
#1-1-2001
以某种方式被转换为
#8-7-1894
@ErikvonAsmuth:
#1-1-2001
将不会被转换,但
1-1-2001
将被转换为数字且等于-2001。和
CDate(-2001)
返回日期1894-07-08,因为它是1899-12-30之前的2001天。但是,
CDate(“1-1-2001”)
将返回2001-01-01。
sWhere = "[ShipDateStart] = #" & Format(CDate(Me.StartDateBox), "mm/dd/yyyy") & _
       " 00:00# AND [ShipDateEnd] = #" & Format(CDate(Me.EndDateBox), "mm/dd/yyyy") & _
       " 23:59#"
stDocName = "ShippingOnTimePSD"
DoCmd.OpenReport stDocName, acPreview, , sWhere, acWindowNormal