访问VBA:在循环中创建的新表导致错误

时间:2011-07-20 20:21:01

标签: ms-access access-vba

我从一个表中抓取字段行并为每一行创建一个新表。新表的名称将等于它们对应的行。

这是我的代码:

Option Compare Database

Public Function createTables()

    Dim db As DAO.Database
    Dim tdf As DAO.TableDef
    Dim rst As DAO.Recordset
    Dim fld As DAO.Field
    Dim strSQL As String

    strSQL = "Select SKUS from SKUS"
    Set db = CurrentDb()
    Set rst = db.OpenRecordset(strSQL)
    Set fld = rst.Fields("SKUS")

    'MsgBox fld.Value

    rst.MoveFirst
    Do While Not rst.EOF
        Set tdf = db.CreateTableDef(fld.Value)

        Set fld = tdf.CreateField("SKUS", dbText, 30)
        tdf.Fields.Append fld

        Set fld = tdf.CreateField("Count", dbInteger)
        tdf.Fields.Append fld

        db.TableDefs.Append tdf

        rst.MoveNext
    Loop

End Function

问题是在代码的第一次迭代(创建第一个表)之后,它给出了一个错误“无效操作”指向该行

...
Set tdf = db.CreateTableDef(fld.Value)
...

为什么你认为这是?我有一种感觉,因为我需要重新设置fld或rst,但我不确定。

任何人都可以帮我解决这个问题吗? 谢谢!

1 个答案:

答案 0 :(得分:2)

您似乎没有从rst读取任何新元组,因此将CreateTableDef重复调用相同的值。尝试更改此内容:

[...]
Set fld = rst.Fields("SKUS")
rst.MoveFirst
Do While Not rst.EOF
    Set tdf = db.CreateTableDef(fld.Value)
[...]

进入这个:

[...]
rst.MoveFirst
Do While Not rst.EOF
    Set fld = rst.Fields("SKUS")
    Set tdf = db.CreateTableDef(fld.Value)
[...]

...如果您打算根据SKUS表中的每个元组创建一个表。