VBA двумерные массивы, подключающиеся к базе данных - PullRequest
0 голосов
/ 13 декабря 2010

Я работаю с VBA в Excel и базы данных в доступе.База данных доступа - это таблица, которая содержит 3 столбца;OrderIDs, который представляет собой столбец чисел, указывающих, в каком порядке находился конкретный элемент, OrderDescription, который представляет собой столбец, содержащий описание элемента, и Item #, который представляет собой столбец, который дает номер каждому конкретному элементу (если элемент являетсятак же, как и другие, они оба являются одним и тем же элементом.Строки будут идентификатором заказа, а столбцы - идентификатором товара.Элементы этого массива будут содержать индикатор (например, True или «1»), который указывает, что этот порядок содержит определенные элементы.Например, строка 6 (представляющая идентификатор заказа 6) будет иметь значение «True» в столбцах 1, 5 и 26, если этот заказ приобрел идентификаторы 1, 5 и 26. приобретенных товаров. Все остальные столбцы для этого заказа будут пустыми.

Чтобы сделать это, я думаю, мне нужно будет определить максимальный номер заказа (39) и максимальный номер товара (33).Эта информация доступна в базе данных, к которой я могу подключиться, используя .connection и .recordset.Некоторые номера заказов и некоторые номера позиций могут не отображаться.

Обратите также внимание, что это, скорее всего, будет разреженный массив (не так много записей), поскольку большинство заказов содержат только несколько элементов.Нам все равно, сколько предметов купил покупатель, только то, что предмет был куплен по этому заказу.

МОЙ ВОПРОС - как мне настроить этот массив?Я попробовал цикл, который присваивал бы значения порядковых номеров массиву, а номера элементов - массиву, а затем определял размеры массива по этим размерам, но это не сработало.

есть ли способ заставить элемент массива возвращать значение True, если оно существует?

Спасибо за вашу помощь

1 Ответ

0 голосов
/ 13 декабря 2010

Мне кажется, что лучшей ставкой может быть перекрестный запрос, выполняемый для соединения доступа.Вы можете создать свой массив с помощью метода 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...