Ms access Access VBA:在循环中创建的新表导致错误
我从一个表中获取字段行,并为每一行创建一个新表。新表的名称将与其对应的行相等 这是我的密码:Ms access Access VBA:在循环中创建的新表导致错误,ms-access,vba,Ms 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
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,但我不确定
有人能帮我解决这个问题吗?
谢谢 您似乎没有从
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)
[...]
…如果您的目的是基于SKU表中的每个元组创建一个表。哦,我的上帝,您是耶稣,工作得非常完美!在过去的几个小时里,我一直在努力解决这个问题!非常感谢。你为什么要这么做?这违反了数据规范化。