【问题标题】:Access VBA: New tables created in a loop causing errorAccess VBA:在循环中创建的新表导致错误
【发布时间】:2011-07-20 20:21:01
【问题描述】:

我正在从一个表中获取字段行并为每一行创建一个新表。新表的名称将与它们对应的行相同。

这是我的代码:

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,但我不确定。

谁能帮我解决这个问题? 谢谢!

【问题讨论】:

  • 您为什么要这样做?这违反了数据规范化。

标签: ms-access vba


【解决方案1】:

您似乎没有从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 表中的每个元组创建一个表。

【讨论】:

  • 天哪,你是完美工作的耶稣!在过去的几个小时里,我一直在努力解决这个问题!谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-14
  • 1970-01-01
  • 1970-01-01
  • 2014-04-04
相关资源
最近更新 更多