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正如已經指出。