我有一个访问数据库。有一个字段是[开始日期]。 [开始日期]的值为01/01/2017,只有一个是2017年7月24日。 [开始日期]字段是表格中的短日期字段。当我将2017年7月24日更改为01/01/2017时,查询运行正常,但是当我在下拉列表中选择7月并且表单值为7并且年份中的2017年下拉时,下面的查询显示它是太复杂,无法评估。我试图使用dateserial函数对一个带小数的值进行日期和一些除法。这是查询:
Base Charge: Round(Sum(IIf(DateDiff("d",[Return to COE Regions].[Start Date]
,CDate(DateSerial([Forms]![Main]![cboReportYear],[Forms]![Main]!
[cboReportMonth],1)))<30,[Base Charge HAL].[Base Charge]/DateDiff("d",
[Return to COE Regions].[Start Date],CDate(DateSerial([Forms]![Main]!
[cboReportYear],[Forms]![Main]![cboReportMonth],1))),[Base Charge HAL].[Base
Charge])),2)
dateserial通常是:
DateSerial(Year(Date),Month(Date),1)
我正在尝试将表单下拉值作为日期。我也试过这个:
Base Charge: Round(Sum(IIf(DateDiff("d",[Return to COE Regions].[Start
Date],format(DateSerial([Forms]![Main]![cboReportYear],[Forms]![Main]!
[cboReportMonth],1,"mm/dd/yy"))))<30,[Base Charge HAL].[Base Charge]/DateDiff("d",
[Return to COE Regions].[Start Date],format(DateSerial([Forms]![Main]!
[cboReportYear],[Forms]![Main]![cboReportMonth],1,"mm/dd/yy")))),[Base Charge HAL].[Base
Charge])),2)
我也尝试过:
Base Charge: Round(Sum(IIf(DateDiff("d",[Return to COE Regions].[Start
Date],format([Forms]![Main]![cboReportMonth]/1/[Forms]![Main]!
[cboReportYear],"mm/dd/yy"))<30,[Base Charge HAL].[Base
Charge]/DateDiff("d",
[Return to COE Regions].[Start Date],format(DateSerial([Forms]![Main]!
[cboReportMonth]/1/[Forms]![Main]![cboReportYear],"mm/dd/yy")),[Base
Charge HAL].[Base
Charge])),2)
我也连接起来尝试将它串在一起。月份中的7月值下降,在该查询中计算为7韩元。
根据我的阅读,使用表格下拉值进行查询存在困难。有工作吗?是否建议我将值存储在vba变量中或者在vba中运行查询?
答案 0 :(得分:0)
Access不知道表单表达式可能包含的内容,因此请将其指定为参数。
在SQL中:
PARAMETERS
[Forms]![Main]![cboReportYear] Short,
[Forms]![Main]![cboReportMonth] Short;
SELECT ... <your query>
如前所述,请从表达式中删除 CDate 。