2015-09-11 92 views
0
之間

MS Access 2013.我需要編寫一份報告,顯示存儲箱內的書籍數量。報告:計數記錄數,範圍在

購買的所有圖書都有唯一的nbr(SaleID)。我們每盒儲存25本書,100本書需要4盒。當我們出售書籍時,它們將從特定的盒子中移除,隨着時間的推移,可以說出售了30本書。然後,我們可以丟棄一個盒子,並將剩下的70本書放在三個盒子裏。我們有數千本書和數百個儲物盒。我需要運行一份報告,向我顯示每100本書有多少本書,以便減少盒子數量(並節省存儲空間)。

報告應顯示這樣的:

001 - 100 34(即34本書籍庫存的數量範圍001〜100

101 - 200 35(35本書籍庫存)

201 - 300 22(22本股票書籍)

301 - 400 60(60本書的股票) 等

下面的查詢做什麼我想,我在哪裏輸入被查詢的百本書的標準。但是,我需要在報告上列出每一百本書,我們所有的書。

SELECT tblSale.BookInStock, Count(tblSale.BookInStock) AS [Total Books] 
FROM tblSale 
WHERE (((tblSale.SaleID) Between 4201 And 4300)) 
GROUP BY tblSale.BookInStock 
HAVING (((tblSale.BookInStock)=Yes)); 

如果有人有任何想法,我會爲你的想法 乾杯 內華達州

回答

0

感激既然你已經每百項查詢,將需要通過編碼每百個批次運行。因此,請考慮從VBA循環查詢創建臨時表。

循環的第一次迭代將創建替換之前的表,然後所有其他迭代會在您的數千個批次中追加上百個批次(通知步驟用於跳過迭代器前進)。順便說一下,您的HAVING子句條件已移至WHERE子句。

Dim i As Long 
Dim sqlStr As String 
Dim db As DAO.Database 
Dim tbl As TableDef 

Set db = CurrentDb 

For Each tbl in db.TableDefs 
    If tbl.Name = "BoxBooksPerHundred" Then 
    db.TableDefs.Delete(tbl.Name) 
    End If 
Next tbl 

For i = 1 to 4300 Step 100 ' ADJUST AS NEEDED 
    If i = 1 Then 
     ' MAKE-TABLE QUERY 
     strsql= "SELECT '" & i & " - " & i + 100 & "' AS [HundredRange], tblSale.BookInStock," _ 
       & " Count(tblSale.BookInStock) AS [Total Books]" _ 
       & " INTO BoxBooksPerHundred FROM tblSale" _ 
       & " WHERE (((tblSale.BookInStock)=Yes)) And" _ 
       & "  (((tblSale.SaleID) Between " & i & " And " & i + 100 & "))" _ 
       & " GROUP BY '" & i & " - " & i + 100 & "', tblSale.BookInStock;" 
     db.Execute strSQL, dbFailOnError 
    Else 
     ' APPEND QUERY 
     strsql= "INSERT INTO BoxBooksPerHundred (HundredRange, BookInStock, [Total Books])" 
       & " SELECT '" & i & " - " & i + 100 & "' AS [HundredRange], tblSale.BookInStock," _ 
       & " Count(tblSale.BookInStock) AS [Total Books]" _ 
       & " FROM tblSale" _ 
       & " WHERE (((tblSale.BookInStock)=Yes)) And" _ 
       & "  (((tblSale.SaleID) Between " & i & " And " & i + 100 & "))" _ 
       & " GROUP BY '" & i & " - " & i + 100 & "', tblSale.BookInStock;" 
     db.Execute strSQL, dbFailOnError 
    End If 
Next i 

Set tbl = Nothing 
Set db = Nothing 

在打開報告的觸發事件上運行此循環。但是,由於相當多的數據,如果您希望數據不會經常更改,請嘗試觸發數據庫打開。最終,使用此臨時表BooksPerHundred作爲記錄來源進行報告。

+0

非常感謝但不完全。我已經添加了Dim strSQL As String。 –

+0

我添加了Dim strSQL As String。我已將代碼添加到命令按鈕的單擊事件中。 當它運行時,它給我一個運行時錯誤3000,保留錯誤(-3002)此錯誤沒有消息。 在調試器中,此行突出顯示 db.Execute strSQL,dbFailOnError 在訪問中表已創建。而第一個記錄是存在的,即 1-101 -1 24 其中24的書籍在100 該塊數。如果我點擊,然後再次運行它,它告訴我的表「BoxBooksPerHundred存在。和調試器高亮顯示行 db.Execute strSQL,dbFailOnError在make表查詢中 –

+0

請參閱編輯如果臨時表在重新創建之前已經存在,現在刪除它 – Parfait