2010-12-12 3 views
0

Ich arbeite mit VBA in Excel und einer Datenbank im Zugriff. Die Zugriffsdatenbank ist eine Tabelle, die 3 Spalten enthält. OrderIDs, das ist eine Spalte von Zahlen, die sagen, in welcher Reihenfolge das bestimmte Element war, OrderDescription, die eine Spalte ist, die die Beschreibung des Elements enthält, und Item #, das eine Spalte ist, die jedem bestimmten Element eine Nummer gibt (wenn das Element das ist) das gleiche wie ein anderes, sie sind beide der gleiche Gegenstand).VBA zweidimensionale Arrays verbinden mit einer Datenbank

Ich muss ein zweidimensionales Array in Excel mit VBA erstellen, welche Artikel in welchen Bestellungen gekauft wurden. Die Zeilen sind die Bestell-ID und die Spalten sind die Artikel-ID. Die Elemente dieses Arrays enthalten einen Indikator (wie True oder eine "1"), der angibt, dass diese Reihenfolge bestimmte Elemente enthält. Beispielsweise hat Zeile 6 (die die Bestell-ID 6 darstellt) "True" in den Spalten 1, 5 und 26, wenn diese Bestellung die Artikel-IDs 1, 5 und 26 erworben hat. Alle anderen Spalten für diese Bestellung sind leer.

Um dies zu tun, muss ich die maximale Bestellnummer (39) und die maximale Artikelnummer (33) ermitteln. Diese Informationen sind in der Datenbank verfügbar, mit der ich eine Verbindung herstellen kann. Einige Bestellnummern und einige Artikelnummern werden möglicherweise nicht angezeigt.

Beachten Sie auch, dass dies wahrscheinlich ein spärliches Array ist (nicht viele Einträge), da die meisten Bestellungen nur wenige Elemente enthalten. Uns ist es egal, wie viele Artikel ein Kunde gekauft hat, nur dass der Artikel bei dieser Bestellung gekauft wurde.

Meine Frage ist, wie kann ich dieses Array einrichten? Ich probierte eine Schleife, die die Werte der Ordnungsnummern einem Array und den Postennummern zu einem Array zuordnete und dann das Array zu diesen Größen dimensionierte, aber es funktioniert nicht.

Gibt es eine Möglichkeit, ein Element eines Arrays einen Wert von True zurückgeben, wenn es existiert?

Danke für Ihre Hilfe

Antwort

0

Es scheint mir, dass die beste Wette auf eine Zugangsverbindung eine Kreuztabelle Abfrage ausgeführt sein kann. Sie können Ihr Array mit der ADO-Methode GetRows erstellen: http://www.w3schools.com/ado/met_rs_getrows.asp.

Mit einer Counter-Tabelle, die ganze Zahlen von 1 bis zur maximalen Anzahl von Elementen in einer Spalte (Feld) enthält.

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 

Ausgang:

 
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

Wille, dass Rückstellelemente, so dass orderItemArray (1, 24) = true, wenn das Element 24 in Bestellnummer betrug 1? –

+0

Es gibt ein Problem, ich gebe zu, dass, wenn es Elemente fehlen, die oben genannten mit dem fehlenden Element. Dies ist jedoch leicht genug, um mit einer Tabelle von Artikelnummern zu korrigieren. – Fionnuala

+0

Ehrfürchtig werde ich es ausprobieren, danke. Der nächste Schritt besteht darin, dieses Array in eine Kookkurrenzmatrix umzuwandeln, die Positionsnummern als Zeilen und Positionsnummern als Spalten liest und vergleicht, welche zwei Dinge zusammen gekauft wurden. Entschuldige, dass du weiter fragst, aber kennst du die Strategie, um das einzurichten? –