Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 连接到数据库的VBA二维数组_Arrays_Excel_Vba_Ms Access_Multidimensional Array - Fatal编程技术网

Arrays 连接到数据库的VBA二维数组

Arrays 连接到数据库的VBA二维数组,arrays,excel,vba,ms-access,multidimensional-array,Arrays,Excel,Vba,Ms Access,Multidimensional Array,我在excel中使用vba,在access中使用数据库。access数据库是一个包含3列的表;OrderID是一列数字,表示特定项目的顺序,OrderDescription是一列包含项目描述,item是一列为每个特定项目提供编号。如果项目与另一个项目相同,则它们都是相同的项目 我需要使用VBA在excel中构建一个二维数组,其中包含在哪些订单中购买的项目。行将是订单ID,列将是项目ID。此数组的元素将包含一个指示符,如True或“1”,表示此订单包含某些项目。例如,如果订单采购的项目ID为1、5

我在excel中使用vba,在access中使用数据库。access数据库是一个包含3列的表;OrderID是一列数字,表示特定项目的顺序,OrderDescription是一列包含项目描述,item是一列为每个特定项目提供编号。如果项目与另一个项目相同,则它们都是相同的项目

我需要使用VBA在excel中构建一个二维数组,其中包含在哪些订单中购买的项目。行将是订单ID,列将是项目ID。此数组的元素将包含一个指示符,如True或“1”,表示此订单包含某些项目。例如,如果订单采购的项目ID为1、5和26,则表示订单ID为6的第6行在第1、5和26列中将显示“True”。该订单的所有其他列都将为空

为了做到这一点,我想我必须确定最大订单号39和最大项目号33。此信息在数据库中可用,我可以使用.connection和.recordset连接到该数据库。某些订单号和某些项目号可能不会出现

还请注意,这可能是一个稀疏数组,因为大多数订单只包含少数项目,所以条目不多。我们不关心客户购买了多少商品,只关心该商品是在本订单上购买的

我的问题是如何设置此阵列?我尝试了一个循环,将订单号的值分配给一个数组,将项目号分配给一个数组,然后根据这些大小对数组进行尺寸标注,但它不起作用

如果数组元素存在,是否有方法使其返回True值


感谢您的帮助

在我看来,最好的选择可能是在访问连接上运行跨选项卡查询。可以使用ADO方法GetRows:创建数组

计数器表包含从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
如果第24项在订单号1中,它会返回orderItemArray1,24=true的元素吗?我承认,有一个问题,如果有缺少的项目,上面的内容会缺少该项目。不过,这很容易用一个项目编号表来纠正。太棒了,我会试试,谢谢。下一步是将该数组转换为一个共现矩阵,该矩阵将项目编号读取为行,将项目编号读取为列,并比较两件东西一起购买的内容。很抱歉不断地问,但是您知道设置的策略吗?您想要什么样的频率计数?仍然不确定您的目标是什么,但是您可以使用cell.CopyFromRecordset rs将记录集直接写入Excel工作表 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