2016-03-01 71 views
0

我已經重寫了標題和描述,因爲最後一個沒有多大意義。微軟訪問報告 - 子報告進行2頁,但訪問認爲它是一個?

基本上,我有一個顯示業務細節的報告。其中的一些細節包括:

  • 公司名稱
  • 地址
  • 文件
  • 客戶

當報告的格式(打印視圖)商業名稱和它的對應關係積水的頁碼被添加到表格中(BusinessPage)。這樣做的代碼放置在第一組頭的「對格式」事件,我列出了下面的代碼:

Dim RST As DAO.Recordset 

Set RST = CurrentDb.OpenRecordset("BusinessPage", dbOpenTable) 
RST.AddNew 
RST![Business Name] = BUSName 
RST![Business Page] = Me.Page 
RST.Update 
RST.Close 

CurrentDb.Execute "SELECT DISTINCT * INTO t_temp FROM BusinessPage" 
CurrentDb.Execute "DELETE FROM BusinessPage" 
CurrentDb.Execute "INSERT INTO BusinessPage SELECT * FROM t_temp" 
CurrentDb.Execute "DROP TABLE t_temp" 

表將是這個樣子:

Business Name  Page No 
Business 1   3 
Business 2   4 
Business 3   6 'This indicates that Business 2 spans over two pages as page 5 is skipped' 
Business 4   7 

在報告標題,我有兩件事情:

  • 封面頁
  • 一個在DEX Sub報表/頁

索引頁(分報告)需要從表(BusinessPage),並列出了所有在報告中的企業,與頁碼一起,他們開始上的信息。

現在你已經知道這是如何工作的,這裏是我的問題: 如果子報告只佔用一頁,那麼子報告可以正常工作。我遇到的問題是,子報告列出了太多記錄,並將其記錄在第二頁上。出於某種原因,訪問仍然認爲子報表在一個頁面上,即使它創建了另一個頁面。儘管它認爲,包含代碼的頁腳([頁面])顯示正確。但是,顯示頁面總數([Pages])的代碼是錯誤的。在報告的末尾,頁腳會說這樣的事情: 第50頁49

的另一個問題我有是,當子報告超過一頁被添加到表中的信息是錯誤的。所添加的信息是假設子報告仍在一頁上。

例如,當子報告佔用一個頁面:

Page 1: Cover Page 
Page 2: Sub Report/Index 
Page 3: Business 1 

小組報告將正確顯示:

Business 1         Page 3 


當子報告佔用2 pages:

Page 1: Cover Page 
Page 2: Sub Report/Index 
Page 3: Sub Report/Index 
Page 4: Business 1 

子報告/索引頁仍會顯示:

Business 1         Page 3 

而應該顯示其爲:

Business 1         Page 4 



有誰知道如何任何想法我能糾正這個?我有一種感覺,可能是因爲子報告在報告標題中(但我需要它,因爲它只會在報告開始時顯示一次)。是否有另一種方法來創建一個二級報告頭來測試這個理論?

讓我知道是否有人想到任何其他解決方案!

編輯: 我將子報告移入它自己的組/報頭,遠離報頭。 這並沒有改變任何東西,訪問仍然認爲它顯示在一頁上,即使它不是。由於設計視圖中的子報告的大小,我還有另一種預感,即訪問認爲它在一個頁面上?在引入數據之前,設計視圖中的子報告將適合於一頁,這是否會成爲問題?我將如何去解決這個問題?

我在想,也許if語句來決定子報告證明有多大,如果它的2頁的長度,然後修改密碼成爲:

RST![Business page] = Me.Page + 1 

這仍然是相當僞劣的修復,雖然,我不知道我怎麼會去寫if語句來計算網頁的

回答

1

這裏發生的事情(我認爲)長度:

當主報告開放,BusinessPage爲空,因此您的索引子報表具有一些最小高度。

然後訪問看到你使用[Pages],所以它必須準備整個報告,即Format事件的所有網頁上運行,添加記錄BusinessPage。在此期間,Access仍然採用最小的子報告並相應地分配頁碼。

這之後你的指數產生,使用原來的頁碼 - 如果索引覆蓋> 1頁,這將是錯誤的。

所以我認爲你應該做的:

之前打開報告(或者在Report_Open),預填充BusinessPage表中的所有記錄,將在那裏,但與虛擬頁號(例如0)。
因此,索引子報表將具有其正確的高度,並且在Format事件中生成的頁碼應該是正確的。

+0

我不知道你是如何設法弄清楚的,但你的答案完美地解釋了它。在執行代碼之前訪問格式化報告,因此在「開格式」階段嘗試一次性完成所有操作都不起作用。首先填充索引表,然後在報告的「打開格式」期間顯示數字修復它。謝謝! – Alex

+1

@Alex:我有你的[上一個問題]的元信息(http://stackoverflow.com/questions/35699697/microsoft-access-report-how-to-cycle-through-all-pages-of-a-report -in打印-VI)。 - > – Andre