使用VBA在Access 2010中创建动态表

时间:2011-07-19 16:13:40

标签: ms-access access-vba ms-access-2010

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

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

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

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

3 个答案:

答案 0 :(得分:8)

如果我不想使用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

答案 1 :(得分:0)

我不确定为什么需要将检索到的数据放入数组中。这似乎是额外的一步。如果您可以从数组生成统计信息,则查询中应该可以执行相同的操作。创建另一个查询,使用结果查询作为一个记录源,并根据您想要创建的字段进行相应的计算。 如果我们看到你想要做的事情,我认为它可以变得更加简单。

答案 2 :(得分:0)

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

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