当字段名称是动态时,vba来创建表

时间:2008-11-19 18:59:16

标签: ms-access dynamic-data

我有一个交叉表查询,它使用动态日期函数来生成列标题,从而产生字段名称。例如:ForecastPeriod:DateAdd(“m”,[Period],[StartDate]) 这意味着每次运行交叉表查询时,我最终都会得到不同的字段名称。 我需要获取此交叉表的结果,并将其与其他3个类似交叉表的结果相结合,以创建一个新表。现在我使用make表查询和3个追加查询。我这样做的原因是在预测期间的范围内为每个物料项目包括4种不同类别的数据。

结果如下所示:

材料类别Per1值... Per2值...... Per24值

MatA需求0 ... 10 ....... 0

MatA需求美元$ 0 ... $ 10 ....... $ 0

MatA预测10 ... 20 ....... 50

MatA预测美元10美元...... 20美元....... 50美元

问题是make表查询是针对当前交叉表查询的结果构建的。当我下个月运行交叉表时,结果将具有不同的字段名称。因此,我无法手动更改make表查询设计中的句点,不再在结果中删除一个句点并添加新句点。

有没有办法在交叉表运行之前使用VBA创建新表而不知道字段名称?

或者有没有办法对字段名称进行编码或在运行后从交叉表中提取它们?

如果我使用以下代码:     strSQL =“SELECT tblForecast.Material,tblForecast.Category,tblForecast.X”& _              “INTO tblTemp”& _              “FROM tblForecast;”

我真的不知道实际上会调用什么tblForecast.X。可能是11/1/08或12/1/08等。

如果我声明一个变量来保存字段名称并使用日期代码来更改它,如何将其添加到表中?我可以使用Alter Table吗?

我确信这可以做到,我无法理解如何做到这一点,所以任何帮助都将受到赞赏!谢谢!

2 个答案:

答案 0 :(得分:2)

VBA创建一个镜像查询列的表:

Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim qdf As DAO.QueryDef
Dim fld As DAO.Field
Dim SourceField As DAO.Field

Set db = CurrentDb

'Create a new tabledef
Set tdf = New DAO.TableDef

'Reference existing, saved querydef
Set qdf = db.QueryDefs("Query1")

tdf.Name = "Table2"

'iterate fields in the query and create fields in the new tabledef
For Each SourceField In qdf.Fields
    Set fld = tdf.CreateField(SourceField.Name, SourceField.Type, SourceField.Size)
    tdf.Fields.Append fld
Next

'Table is created and saved when the tabledef is appended to the current db
db.TableDefs.Append tdf

答案 1 :(得分:1)

可以将自己的标题用于交叉表,例如:

ColHead:"Month" & DateDiff("m",[SaleDate],Forms!frmForm!txtSomeDate)

这将导致名为'Month'的列标题和来自txtSomeDate的偏移数字。

也可以使用vba来构建新查询。