2010-12-12 54 views
0

Je travaille avec vba dans Excel et une base de données en accès. La base de données d'accès est une table qui contient 3 colonnes; OrderIDs qui est une colonne de nombres indiquant l'ordre dans lequel l'élément particulier se trouvait, OrderDescription qui est une colonne qui contient la description de l'élément, et Item # qui est une colonne qui donne un numéro à chaque élément particulier (si l'élément est le comme un autre, ils sont tous les deux le même objet).VBA tableaux bidimensionnels se connectant à une base de données

J'ai besoin de construire un tableau bidimensionnel dans Excel en utilisant VBA contenant quels articles ont été achetés dans quelles commandes. Les lignes seront l'identifiant de la commande et les colonnes seront l'identifiant de l'article. Les éléments de ce tableau contiendront un indicateur (comme True ou un "1") qui indique que cet ordre contient certains éléments. Par exemple, la ligne 6 (représentant l'ordre de commande 6) aura "True" dans les colonnes 1, 5 et 26 si cette commande a acheté les ID d'articles 1, 5 et 26. Toutes les autres colonnes de cet ordre seront vides. Pour ce faire, je vais devoir déterminer le numéro de commande maximum (39) et le numéro d'article maximum (33). Cette information est disponible dans la base de données à laquelle je peux me connecter en utilisant un .connection et un .recordset. Certains numéros de commande et certains numéros d'article peuvent ne pas apparaître. Notez également que ce sera probablement un tableau clairsemé (pas beaucoup d'entrées) que la plupart des commandes ne contiennent que quelques éléments. Nous ne nous soucions pas du nombre d'articles achetés par un client, mais seulement que l'article a été acheté sur cette commande. Ma question est Comment est-ce que je peux installer ce tableau? J'ai essayé une boucle qui assignerait les valeurs des numéros de commande à un tableau et les numéros d'éléments à un tableau, puis en dimensionnant le tableau à ces tailles, mais cela ne fonctionnera pas.

Y at-il un moyen de rendre un élément d'un tableau retourne une valeur de True si elle existe?

Merci pour votre aide

Répondre

0

Il me semble que le meilleur pari peut être une requête onglet croix exécuter sur une connexion d'accès. Vous pouvez créer votre tableau avec la méthode 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 #] 

Avec une table compteur contenant des entiers de 1 au nombre maximum d'éléments dans une colonne (champ) 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 

sortie:

 
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

Est-ce que les éléments de renvoi de telle sorte que orderItemArray (1, 24) = vrai si l'élément 24 est dans le numéro d'ordre 1? –

+0

Il y a un problème, je l'admets, en ce que s'il y a des éléments manquants, ce qui précède avec miss cet élément. Cependant, cela est assez facile à corriger avec un tableau des numéros d'article. – Fionnuala

+0

Génial Je vais essayer, merci. L'étape suivante consiste à transformer ce tableau en une matrice de cooccurrence qui lit les numéros d'articles sous forme de lignes et de numéros d'articles sous forme de colonnes et compare les deux articles qui ont été achetés ensemble. Désolé de continuer à poser des questions, mais connaissez-vous la stratégie pour mettre cela en place? –