2012-12-18 78 views
1

需要幫助理解DoCmd.OpenReport函數背後的上下文。我在窗體上有一個按鈕,用於生成包含數據庫表中所有記錄的報告。我希望報告僅基於表單中顯示的信息生成。我已經使用該向導向我的表單添加命令按鈕以生成摘要報告,這裏是自動化的VBA。基於表單的MS訪問篩選報告

Private Sub GenRpt_Click() 
On Error GoTo Err_GenRpt_Click 
Dim stDocName As String 
Dim FrmId As String 
stDocName = "Summary v2" 
DoCmd.OpenReport stDocName, acPreview 
Exit_GenRpt_Click: 
Exit Sub 
Err_GenRpt_Click: 
MsgBox Err.Description 
Resume Exit_GenRpt_Click 
End Sub 

我知道我suppoed到soime樣的條件staement的插入剛DoCmd.OpenReport後的代碼,但無法弄清楚如何從形式傳遞的用戶ID過濾報告。我的表單有一個包含UserID的文本框「Text31」,我的報表有一個與結果相對應的文本框「tstUserID」。在我的cmd按鈕單擊之前,如何將報告結果限制爲僅顯示在「Text31」中的用戶ID?

回答

2

喜歡的東西*:

DoCmd.OpenReport stDocName, acPreview,,"UserID=" & Me.Text31 

其中userid是數值型字段的名稱包含在報告中的記錄源。

如果該字段是文本數據類型,則需要引號:

DoCmd.OpenReport stDocName, acPreview,,"UserID='" & Me.Text31 & "'" 

這似乎並不可能,用戶ID將包括一個內部引號,所以上面的應該是足夠安全的,如果它很可能,你需要逃避,像這樣:

DoCmd.OpenReport stDocName, acPreview,,"UserID='" _ 
    & Replace(Me.Text31,"'","''") & "'" 

要添加WHERE條件,它需要一個非常類似的形式在WHERE語句中的查詢。


* The Syntax for Openreport is given as

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

Remou,該用戶ID是一樣的東西ABC123,所以我應該使用第二個語法。我輸入了以下內容並正在接收語法錯誤。 DoCmd.OpenReport(stDocName,View,FilterName,_ WhereCondition:=「UserID =」&Me.Text31,WindowMode,OpenArgs) –

+0

誤解,我將澄清。 – Fionnuala