2013-08-01 81 views
2

希望這是我對Access的最後一個問題,因爲我很快就會完成它。如何動態填充報表?

我目前有一個報告,是從按下「運行」按鈕時填寫的表單生成的。搜索數據庫主鍵並填充表單。當用戶點擊「打印」按鈕時,會生成可打印的報告,並由該表單中的數據填充。所有這一切都很簡單。

現在,在表單中,有一個列表框。該列表框顯示交易類型的結果,取決於單擊哪種交易類型。例如,點擊「購買」會讓所有在列表框中購買東西的客戶點擊並點擊「已售出」,將會讓所有在列表框中已售出東西的顧客退出。這兩個交易有更多的交易,但這對於這個問題的目的無關緊要。

我需要做的是使每個事務類型的列表框的內容(由VBA中的查詢填充)顯示在可打印報告上。

因此,例如,該報告可能是這個樣子:

購買: 約翰 辛迪 亞歷

銷售: 馬特 史蒂芬 約翰 羅布

有誰知道簡單的方法來做到這一點?我可以隱約想到如何做到這一點,但這很複雜,我不知道我需要使用的確切功能。基本上我以爲我會運行填充列表框的查詢,但隨後在while循環中解析每個結果,並將其顯示在報告中。

非常感謝您的幫助!

回答

0

假設使用用於創建表單的記錄集創建報表,可以將填充列表框的記錄集連接到填充表單其餘部分的記錄集。如果您說LEFT將列表框的記錄集連接到事務類型表單的記錄集,那麼結果記錄集應該有你需要創建所需報表的所有東西。 如果報表需要根據事務類型修改其格式,請嘗試使用報表的OnOpen和OnClose事件以及詳細信息部分的OnFormat事件。我有一些像這樣的報道的經驗。如果您需要更多關於事件的幫助,請添加註釋並提供一些具體的細節,我可能會提出有用的建議。

+0

你能舉一個簡單的例子來說明如何做到這一點嗎? –

2

與窗體相比,報表是一個相當靜態的對象。動態更改顯示在您通常會使用Where論據OpenReport的報告,通常在按下按鈕,並從當前活動窗體上的控件閱讀一些值的數據:

DoCmd.OpenReport "rptName", acViewPreview, , "SomeField=" & frmName!ctlName 

如果該值上形式是一個字符串,那麼它需要撇號包圍:

DoCmd.OpenReport "rptName", acViewPreview, , "SomeField='" & frmName!ctlName & "'" 

的報告也有可能使用一個Filter屬性,也可以通過編程設置其RecordSource。第一種選擇是最常見的,也是最簡單的。

如果報告有一個列表框,那麼您通常會修改其RowSource,使用帶有引用您的表單上的控件的條件的查詢。但我會質疑爲什麼這是必要的,因爲列表框與報告中的其他數據沒有關係。

如果您正在討論動態更改報告中顯示的內容 - 移動和隱藏控件等 - 則這是一個不同的問題。您需要先在Design View中打開報告。這是不尋常的,很少需要。通常,您會創建一個單獨的報告,可能會複製原始報告,並使用該按鈕來決定顯示哪個報告。(有些報表事件可用於隱藏或移動報表上的控件 - 例如OnFormat - 不需要在Design View中打開該報表,但我不認爲這就是您所知尋找)