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:动态创建控件和链接事件处理程序