2011-07-20 4 views
0

1つのテーブルからフィールド行を取得し、各行に新しいテーブルを作成しています。新しいテーブルには、対応する行と同じ名前が付けられます。ここで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

関連する問題