访问查询 - 要评估太复杂,数值表达式可能包含太多复杂元素

时间:2017-09-03 21:01:58

标签: vba date ms-access

我有一个访问数据库。有一个字段是[开始日期]。 [开始日期]的值为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中运行查询?

1 个答案:

答案 0 :(得分:0)

Access不知道表单表达式可能包含的内容,因此请将其指定为参数。

在SQL中:

PARAMETERS
    [Forms]![Main]![cboReportYear] Short,
    [Forms]![Main]![cboReportMonth] Short;
SELECT ... <your query>

如前所述,请从表达式中删除 CDate

相关问题