Access 2010中使用VBA创建动态表

Posted

技术标签:

【中文标题】Access 2010中使用VBA创建动态表【英文标题】:Using VBA to create a dynamic table in Access 2010 【发布时间】:2011-07-19 16:13:40 【问题描述】:

我有一个带有 VBA 模块的 Access 2010 数据库,可以对数据进行一些统计分析。统计分析的结果不能通过 SQL 生成,但可以以表格的形式呈现。现在,我可以在即时窗口中运行 VBA 函数,它会循环遍历结果并使用 Debug.Print() 将它们写入终端。

我想将此函数的结果提供给 Access 的其余部分,以便我可以从结果表中创建查询和报告。所以我正在寻找的是如何将我的函数变成一个“动态表”——一个实际上并不存储数据的表,而是存储在使用该表时动态运行和填充表数据的 VBA 函数.

我花了很多时间研究通过 MAKE TABLE 查询或在 VBA 中使用 DDL 动态创建表,但所有这些示例都使用 SQL 从现有记录创建新表。我不能使用 SQL 来生成结果,所以我不确定如何将结果强制转换为 Access 可以识别的对象。部分问题是我对 Access VBA 术语不够熟悉,不知道我应该寻找什么。

我的声明只是 "Public Function GenerateSchedule" 。它有三个代码块:第一个使用查询从数据库中提取我需要的数据,并将 RecordSet 处理成一个数组。第二个块对数组进行统计分析,第三个块将分析结果打印到终端。我想将第三个块替换为一个块,该块将结果提供为可供 Access 其余部分使用的表。

【问题讨论】:

声明只是 "Public Function GenerateSchedule" 。它有三个代码块:第一个使用查询从数据库中提取我需要的数据,并将 RecordSet 处理成一个数组。第二个块对数组进行统计分析,第三个块将分析结果打印到终端。我想将第三个块替换为一个块,该块将结果提供为可供 Access 的其余部分使用的表。 【参考方案1】:

如果我不想使用 DDL 和 SQL 查询,我会使用以下代码...

Set dbs = CurrentDb        
Set tbl = dbs.CreateTableDef("tbl_Name")
Set fld = tbl.CreateField("Field1", dbText, 255)
tbl.Fields.Append fld
Set fld = tbl.CreateField("Field2", dbText, 255)
tbl.Fields.Append fld
Set fld = tbl.CreateField("Field3", dbInteger)
tbl.Fields.Append fld
Set fld = tbl.CreateField("Field4", dbCurrency)
tbl.Fields.Append fld
dbs.TableDefs.Append tbl
dbs.TableDefs.Refresh

如果你想添加一条记录,你可以这样做

Dim dbs As DAO.Database
Dim rs As DAO.Recordset

Set dbs = CurrentDb
Set rstVideos = dbs.OpenRecordset("tbl_name")

rs.AddNew    
rs("field1").Value = "TEST "   
rs("field2").Value = "TEXT"   
rs("field3").Value = 1991
rs("field4").Value = 19.99

rstVideos.Update

【讨论】:

这里看到的问题是每次要更新表数据时都需要手动运行这个子程序。有没有办法让这段代码在每次读取表格时运行?就像表的“OnRead”事件可以触发调用我的 VBA 函数的宏? rstVideos 的用途是什么,它是什么数据类型?还有,rs不是还没有初始化,会报错吗?【参考方案2】:

我不确定为什么需要将检索到的数据放入数组中。似乎又多了一步。如果您可以从数组中生成统计信息,那么在查询中应该可以实现同样的事情。创建另一个查询,将结果查询用作一个记录源,并对您要创建的字段进行相应的计算。 如果我们看到你想要做的事情,我认为它可以变得更简单。

【讨论】:

【参考方案3】:

这听起来像是一个断开连接的记录集,或者可能是“合成记录集”,这是 ADO 可以做的事情。我不使用 ADO,因此无法为您提供指导,但也许这将为您提供所需的内容。

或者,根据您希望向用户显示的方式,您可能可以在 Access 中进行本机操作。例如,如果在列表框中的表单或报表上显示就足够了,那么您可以编写自定义回调函数并将其绑定到列表框。

【讨论】:

以上是关于Access 2010中使用VBA创建动态表的主要内容,如果未能解决你的问题,请参考以下文章

VBA for Access 2010:动态创建控件和链接事件处理程序

访问 VBA 动态 Excel 导入

如何将ACCESS的表和查询创建成动态的WEB?

访问 VBA:连接动态列并循环执行

Access VBA:将表导出到 Excel 2010 数据透视表

通过 VBA 在 MS Access 中自动链接/刷新 ODBC 链接表