2016-12-06 56 views
0

我一直在尋找一段時間,看看是否有可能通過使用表單中的查找字段來限制報告中的結果。首先,有一點上下文。我正在製作一個數據庫來存儲聯盟大學的建築物的可訪問性信息。我需要能夠生成一份報告,顯示建築物具有哪些用戶選擇的質量,如坡道入口或人員招待會。使用查閱字段過濾在Access中的報告或查詢

我已將所有這些功能存儲在自己的表中,以便用戶可以編輯它們,然後使用查找字段爲建築物選擇這些功能。現在的問題是運行查詢來生成報告。 如果我在...WHERE [Buildings].[Accessibility Features].Value = 2 AND [Buildings].[Accessibility Features].Value = 8;這樣的查詢中對值進行硬編碼,我會得到明智的結果。如果我使用IN()函數(我有使用DoCmd.OpenReport()功能與外地工作),我得到返回的有要麼功能2 功能8這是不是很方便所有的建築物。前面提到的DoCmd.OpenReport()函數在串聯AND語句時看起來不起作用。

我使用VBA如下組裝SQL代碼(喂參數成適當的語句開頭的標準箱)的嘗試:

If Me.BuildingFeatSelect.ItemsSelected.Count = 0 Then 
    MsgBox "Must select at least one feature" 
    Exit Sub 
End If 

Set ctl = Me.BuildingFeatSelect 
For Each varItem In ctl.ItemsSelected 
    strWhere = strWhere & ctl.ItemData(varItem) & " AND Buildings.[Accessibility Features].Value = " 
Next varItem 

strWhere = Left(strWhere, Len(strWhere) - 48) 
MsgBox strWhere, , Output 

Dim qdf As QueryDef 
Dim rst As Recordset 
Set qdf = CurrentDb.QueryDefs("Copy of Building Features 2") 
qdf.Parameters(0) = strWhere 
Set rst = qdf.OpenRecordset 

rst.Close 
qdf.Close 
Set rst = Nothing 
Set qdf = Nothing 

這讓我無處快。它只是拋出一個關於參數類型的錯誤。我試過使用參數窗口設置類型,但這不起作用。

有沒有一種有效的方法來根據查找框中的多個條目生成報告?

感謝您的幫助,並對長期問題抱歉。

+0

嗨,而不是左側使用修剪功能。此外,您的[輔助功能]數字或字符串? – Lybren

回答

0

好吧,你知道了一半的權利。您可以將參數提供給查詢,查詢使用的每個參數都有一個值。
在您的查詢中,您只使用一個參數,並且正在爲其分配一個字符串。這不是使用參數的正確方法。你最好建立一個SQL選擇並根據你創建的字符串進行過濾。

Dim qdf As QueryDef 
Dim rst As Recordset 
Set qdf = CurrentDb.CreateQueryDef("", "SELECT * from tblBuildingFeatures WHERE [Accessibility Features]=" & strWhere & ";") 
Set rst = qdf.OpenRecordset 

這將過濾查詢。

+0

這似乎有竅門!謝謝。爲了讓它按我想要的方式工作,我還爲查詢添加了一個名稱,運行該腳本,然後在刪除新查詢並添加行DoCmd.OpenReport「...」之前爲新查詢創建一個報告, acViewPreview'和'DoCmd.DeletObject acQuery「...」'同樣,非常感謝您的幫助! – tecwhizz

相關問題