2008-12-29 83 views
15

我有一個現有的Access MDB。我將一個命令按鈕添加到運行現有報告的現有窗體。正在進行的更改是,此按鈕需要傳入包含所報告記錄ID的參數 - 當前報告在MDB中的每個記錄上運行。如何以編程方式將參數傳遞給訪問報告?

我已經更改了報表運行的查詢以使用ID值的參數,因此現在單擊該按鈕時Access會提示要報告的記錄ID,並且報告顯示爲應該顯示。

但是,我不能爲我的生活弄清楚如何將參數傳遞到報表以供查詢使用。我怎樣才能做到這一點?

回答

20

的DoCmd.OpenReport方法有各種爭論,其中一個是在哪裏聲明:

DoCmd.OpenReport"rptReport", acViewPreview,,"ID=" & Me.ID 

也就是說

expression.OpenReport(ReportName, View, FilterName, WhereCondition, WindowMode, OpenArgs) 
+0

我認爲這是最乾淨的方法。 – 2008-12-30 04:09:03

+0

AHA!這就是我一直在尋找的!謝謝,Remou。 – 2009-01-07 17:00:43

+0

我使用的是Access 2003,而「WhereCondition」屬性實際上是第四個參數,所以在上例中只需要兩個逗號,即: DoCmd.OpenReport「rptReport」,acViewPreview ,,「ID =」&Me .ID – 2012-09-06 22:10:51

3

我這種類型的問題,一般的方法是節約標準在數據庫中,通常是具有一行的控制表。然後爲了引用你的標準,你把一個查詢放入paranthesis中,返回你想要的標準的一個值。對你來說,這將是這樣的:

(select reportID from control) 

這個techinque的優點是控制表記住您運行報告下一次的設置。當然,ReportID將綁定到表單中的字段。我還喜歡你的查詢與表單隔離的事實;它們可以獨立於表單運行。

1

爲什麼每個人都想讓這個如此複雜,我不知道。

  1. 保存不帶參數的報告記錄源。

  2. 按照Remou的建議,在DoCmd.OpenReport的相應參數中傳遞條件。

試圖做任何其他方式將是抵制在Access中完成任務的自然方法的問題。

2

docmd.openreport的Where子句是一個與SQL語句中的where子句使用相同格式的字符串。

將參數設置爲在docmd而不是報表的RecordSource中查詢的原因是靈活性。您可能需要在沒有任何參數的情況下打開報告/返回所有記錄,或者有能力過濾不同的字段。

1

我知道這是一箇舊的帖子,但這讓我有點。錯誤是「無效使用parren」,但問題是字段名稱中的空格。我從數據庫創建一個報告,有人犯了常見的錯誤,空間。

要通過在where子句中傳遞一個參數去查詢時,數據庫字段有一個空間,用這個例子:

DoCmd.OpenReport "rptByRegionalOffice", acViewPreview, , "[" & "Regional Office" & "]" & "=" & "'" & cmboOffices.Value & "'" 

如果你仔細想想這一點,你可以看到,這將產生where [Regional Office]='string value'就像你期望在訪問sql。

相關問題