将VBA数组添加到新的Access数据库

我非常精通VBA,但是我几乎不了解Access! 我正在VBA中使用Arrrays运行一个复杂的模拟,我想在某处存储结果。 由于模拟的结果是相当大的(〜1GB的内存),我想存储在Access而不是Excel中。

我目前有大量的数组填充了我的数据,但我不知道如何将这些数据写入数据库,甚至不知道如何用VBA创build数据库。 下面是我需要做的,简而言之,与VBA:

  • 创build一个新的Access数据库
  • 创build一个新的访问表(该数据库将只有一个表)
  • 以编程方式创build〜1200个字段
  • 将我的数组中的结果复制到新的Access表中。

我已经在这里看了很多答案,但是他们都没有完全回答我的问题。 例如, 使用VBA将字段添加到MS Access Table会谈到将字段添加到数据库。 但是我并没有在这里列出双打。 我的大部分arrays是双打的。 这会是一个问题吗?

编辑:

以下是关于该项目的更多细节:

我正在运行networkingdevise模拟。 因此,我开始生成约150,000个独特的networking。 然后,我运行了大量的计算(不,这些不能简化为查询,不幸的是!)的networking特征。 最终每个可能的networking(唯一logging)是~1200。 因此,我想将这些存储在Access数据库中。 每个logging将是一个独特的networking,每个字段将是一个与该networking相关的特定特征。

几乎所有的领域(在这个arrays!)是双打的。

你(几乎?)从来不希望有一个表的数据库。 你也可以将它存储在一个文本文件中。 数据库的主要优点之一是将数据与不同的表格关联起来,而一张表格则不需要它们。

幸运的是,对于你来说,你需要多个表格,而数据库可能是最好的select。 你(几乎)永远不需要在代码中创build永久表(临时表,当然,但不是永久的)。 如果你的字段名称是可变的,你需要改变你的devise。 当数据是可变的时,它会进入数据库的数据部分。 当它被修复时,它可以是一个表或一个字段。 根据你所说的话,我认为你需要这个:

在Access中使用这些字段创build一个名为tblNetworks的表格

NetworkID AutoNumber NetworkName Short Text 

然后用这些字段创build另一个名为tblCalculations的表

 CalcID Autonumber NetworkID Long (Relates to tblNetworks, one to many) CalcDesc Short Text Result Number (Double) 

您要在Access表中命名您的字段将是CalcDesc数据。 您将使用ADODB执行将数据放入表中的INSERT INTO SQL语句。

你将以tblNetworks结束150k条logging和tblCalculations(1,200 x 150k条logging)。 当你的桌子变长,而不是随着情况的变化而变得更宽,那么你devise的一个很好的指示是正确的。

如果您真的不熟悉Access,我build议学习如何创build表格,设置关系和参照完整性。 如果您不知道SQL,请searchINSERT INTO。 如果您以前没有在Excel中使用过ADO,请searchADODB Connections和Execute方法。

更新

你肯定可以逃脱这个CSV。 就像你说的那样,开销很低。 文本文件或数据库是否是正确的答案可能更多取决于你将如何使用数据以及频率。

如果你打算把这个东西拉到Excel中,做一些sorting或filter,也许是一个数据透视表,那么你从CSV中获得的任何性能都不会太差。 如果您只需要一次处理一部分数据,则可以使用ADO读取文本文件,并仅在此时提取所需的数据,进一步减轻sorting和过滤150k行的速度。 更何况,如果你有一些RAM的演出,150k x 1,200可能不会坏。

如果您发现CSV的性能很糟糕,因为您的硬件不能完成任务,您必须经常访问它,或者对数据执行大量不同的查询,使用数据库可能会有好处。 如果您的字段按照您的说法进行组织,您可能会从更多的表格中受益。 你仍然有networking表和计算表,但你也有市场,槽和特性表。 然后你的Calc表格将如下所示:

 CalcID CalcDesc NetworkID MarketID SlotID CharacteristicID Result 

如果你多次查找数据,而且你很快需要它,那么你不会比这些表上的一堆INNER JOIN和WHERE子句做得更好。

但是,只有您可以决定是否值得使用数据库的所有设置和开销。 正因为如此,我会开始下降的CSVpath,直到改变的理由呈现自己。 我将以从CSV切换到数据库的方式devise我的代码,只触及一些过程(如使用类模块),以便更改不会影响任何已经过testing的业务逻辑。