4

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

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

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

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

4

3 回答 3

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
于 2011-07-19T16:51:31.697 回答
0

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

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

于 2011-07-20T23:13:12.297 回答
0

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

于 2011-07-19T21:45:08.830 回答