2010-12-12 68 views
0

我在Excel中使用vba和訪問數據庫。訪問數據庫是一個包含3列的表; OrderIDs是一列數字,表示特定項目的順序,OrderDescription是包含項目描述的列,Item#是對每個特定項目給出數字的列(如果項目是與另一個相同,它們都是相同的項目)。連接到數據庫的VBA二維數組

我需要在Excel中建立一個二維數組,使用VBA控制哪些物品是在哪些訂單中購買的。這些行將是訂單ID,列將是項目ID。此數組的元素將包含一個指示符(如True或「1」),指示此訂單包含某些項目。例如,如果訂單購買了物品ID 1,5和26,則第6行(代表訂單ID 6)在第1,5和26列中將具有「真」。該訂單的所有其他列將爲空白。

爲了做到這一點,我想我必須確定最大訂單數量(39)和最大項目數量(33)。這些信息在我可以使用.connection和.recordset連接到的數據庫中可用。某些訂單號和某些項目號可能不會顯示。

請注意,這可能是一個稀疏的數組(不是很多條目),因爲大多數訂單隻包含幾個項目。我們不關心客戶購買了多少物品,只是該物品是根據此訂單購買的。

我的問題是我該如何設置這個數組?我嘗試了一個循環,它會將訂單號的值分配給一個數組,然後將這些項的數字分配給一個數組,然後將數組的大小標註爲這些大小,但它不會工作。

有沒有辦法讓一個數組的元素返回一個True值(如果存在的話)?

感謝您的幫助

回答

0

在我看來,最好的辦法可能是訪問的連接上運行交叉表查詢。您可以使用ADO方法GetRows創建陣列:http://www.w3schools.com/ado/met_rs_getrows.asp

TRANSFORM Nz([Item #],0)>0 AS Val 
SELECT OrderNo 
FROM Table 
GROUP BY OrderNo 
PIVOT [Item #] 

隨着含有1整數的列(字段)NUM項的最大數目的計數表。

TRANSFORM First(q.Val) AS FirstOfVal 
SELECT q.OrderNo 
FROM (SELECT t.OrderNo, c.Num, Nz([Item #],0)>0 AS Val 
FROM TableX t RIGHT JOIN [Counter] c ON t.[Item #] = c.Num 
WHERE c.Num<12) q 
GROUP BY q.OrderNo 
PIVOT q.Num 

輸出:

 
OrderNo 1 2 3 4 5 6 7 8 9 10 11 
        0 0  0 0 0 0 
1  -1 -1   -1    -1 
2  -1 -1 -1      -1 

+0

請問該返回元件,使得orderItemArray(1,24)=真,如果第24項是在訂單編號1? – 2010-12-13 00:22:43

+0

我承認存在一個問題,那就是如果有缺失的物品,上面就會遺漏那個物品。但是,這很容易用項目編號表進行糾正。 – Fionnuala 2010-12-13 00:31:29

+0

真棒我會試試看,謝謝。下一步是將該數組轉換爲一個同時出現的矩陣,將項目編號作爲行和項目編號讀取爲列,並將兩件事物一起進行比較。抱歉不斷問,但你知道制定策略嗎? – 2010-12-13 00:55:02