2011-07-20 59 views
0

我從一個表中獲取字段行併爲每行創建一個新表。新表格將具有與它們對應的行相同的名稱。訪問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,但我不確定。

任何人都可以幫我解決這個問題嗎? 謝謝!

+2

爲什麼要這麼做?這違反了數據標準化。 –

回答

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) 
[...] 

...如果你的目的是基於SKU的表中的每個元組創建一個表。

+0

噢,我的上帝,你是完美的耶穌!在過去的幾個小時裏,我一直在努力工作!謝謝! – Shubham