2017-09-03 83 views
0

我有一个访问数据库。有一个字段是[开始日期]。 [开始日期]的值为01/01/2017,只有一个是2017年7月24日。 [开始日期]字段是表格中的短日期字段。当我将7/24/2017更改为01/01/2017时,查询运行正常,但是当我在下拉菜单中选择了7月并且该表单值为7,并且年度中的2017下拉式时,以下查询表示它是太复杂,无法评估。我正在尝试使用dateserial函数来执行一个datediff,并且使用小数值进行一些除法运算。下面是该查询:访问查询 - 太复杂的评估,数值表达式可能包含太多复杂的元素

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

我不知道这是否是错误的原因,但我知道它会导致一个错误: - 在你的“也试过”你的DateSerial([Forms]![Main])! [cboReportYear], [Forms]![Main]![cboReportMonth],1'缺少其右括号,并且'DateSerial([Forms]![Main]! [cboReportMonth]/1/[Forms]![Main]![cboReportYear] '缺少它的右括号以及两个参数(它需要传递给它的年,月和日) - 但是你传递了一个由两个分部计算的数字,即类似于'8/1/2017'这大约为'0.003966' ) – YowE3K

+0

另外,你为什么要做'CDate(DateSerial(...))'?'DateSerial'已经是'Date',所以没有必要转换它。 – YowE3K

回答

0

访问不知道表单表达式可能容纳什么,所以将其指定为参数。

在SQL:

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

,做从表达中删除CDATE正如已经指出。