2012-11-09 22 views
3

我在構建報表時需要有多個聚合查詢(主要是總計和不同的事情)。爲報表輸入重複的查詢參數

我構建了一個主報告,並有子報表包含每個單獨的查詢。所有這些查詢都有一個日期範圍的參數(這將是相同的)。

因此,當我拉起報告時,對於相同的參數(開始日期和結束日期),要求約12次。什麼是這個問題的有效解決方案?

醜陋的解決方法(缺乏更好的解決方案)我打算使用的是讓查詢引用表單值。例如:

SELECT count(*) FROM tblTests 
WHERE testdate >= [Forms]![formReportParams]![startDate] 
    AND testDate <= [Forms]![frmReportParams]![EndDate] 

有一個不太馬虎解決辦法,讓所有我的獨立子報表查詢的共享相同的查詢參數?

+1

我想你可能會在運行報表之前將值存儲在表中,然後只對這些值進行查找。除了當你調試一個查詢時,你不需要打開一個特定的表單,這並不是那麼簡單。 – HelloW

+1

你爲什麼認爲表單馬虎? – Fionnuala

+0

嗯,這不一定是馬虎,我只是不喜歡讓用戶瀏覽像3表格訪問報告。我想當他們選擇這個報告時,我會顯示一個表單讓他們輸入日期參數​​,然後打開報告(在報告查詢中引用表單上的控件)。我只是傾向於避免讓我的查詢儘可能在表單上引用控件。關於它的一些事情感覺不對。 – Scotch

回答

1

您可以爲開始和結束日期創建單獨的函數,並在查詢WHERE子句中使用這些函數。

Function GetStartDate(Optional ByVal pReset As Variant) As Date 
    Static dteStart As Date 
    If Not IsMissing(pReset) Then 
     dteStart = pReset 
    End If 
    GetStartDate = dteStart 
End Function 

初始化函數的靜態日期值,它將作爲返回值持續存在,直到您再次更改爲止。 (但是它只是與當前的Access應用程序會話保持一致。)

GetStartDate #2012-01-01# 

然後在查詢中使用該函數。

SELECT count(*) FROM tblTests 
WHERE testdate >= GetStartDate(); 

GetEndDate()做同樣的操作。