• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ADOX 複数回フィールドを定義することは出来ませ)

ADOXで複数回フィールドを定義することはできません | 実行時エラー-2147217858

このQ&Aのポイント
  • ADOXやVBのコードを使用してAccessでテーブルを作成する際、複数回同じフィールドを定義することはできません。このエラーが発生する理由として、テーブル内のフィールド数の最大値が255に制限されていることが挙げられます。
  • VBのコードの一部で、ADOXやCatalog、Tableなどのオブジェクトを使用してテーブルを作成しています。コード内でForループを使用してフィールドを定義している部分がありますが、このループ内で同じフィールドを複数回定義しようとしているためエラーが発生しています。
  • エラーが発生する原因を特定するためには、Forループ内のカウンタ変数iの値やループの範囲を確認する必要があります。また、テーブル作成時に指定するフィールドの数や属性も確認してください。エラーが発生する場合は、フィールドの定義に問題がある可能性があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

No1です。 質問では、テーブルを新規に作成するということなので、 No1はそれぞれ、 Sub test133() Dim cat As New ADOX.Catalog Dim tbl As ADOX.Table Dim col As New ADOX.Column Dim i As Long cat.ActiveConnection = CurrentProject.Connection Set tbl = New ADOX.Table tbl.Name = "テーブル名" With tbl.Columns For i = 1 To 10 .Append "F" & i, adVarWChar, 20 Next i End With cat.Tables.Append tbl Set cat = Nothing End Sub Sub test134() Dim cat As New ADOX.Catalog Dim tbl As ADOX.Table Dim col As New ADOX.Column Dim i As Long cat.ActiveConnection = CurrentProject.Connection Set tbl = New ADOX.Table tbl.Name = "テーブル名" cat.Tables.Append tbl For i = 1 To 10 Set col = New ADOX.Column With col .Name = "F" & i .Type = adVarWChar .DefinedSize = 20 .Attributes = adColNullable End With tbl.Columns.Append col Set col = Nothing Next i Set cat = Nothing End Sub のように。「テーブル名」の新規テーブルにフィールド名を F1,F2・・・のように新規に設定します。

nawvmaltyemj
質問者

お礼

どうもありがとうございました。

その他の回答 (1)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

フィールドを追加する方法を二つばかり。 二つのプロシージャで、 For i = 2 To 10 としているのは、あらかじめフィールドが 一つ設定してあって、フィールド名は"F1" となっています。追加すると、F2,F3,F4・・・・ が追加されます。 一番目と二番目の違いがわかるでしょうか? 質問は二番目のほうだと思いますが。この方法では、 ループの中でColumn設定したり削除したりします。 ループに入る位置、フィールドの設定方法、オブジェクトの 設定と破棄などについて確認してみてください。 なお、質問の中のエラー、 実行時エラー -2147217858 複数回フィールドを定義することは出来ません。 と言うエラーになり、テーブルが作れません。 は、コードを実行すると、そのときフィールドが一つだけ 設定されてふたたびループに入ったときに同じフィールドを 作成しようとしてエラーが起きるのでは、と思います。 エラーの原因はループの位置、オブジェクトの設定と破棄 などでしょう。 質問のコードを実行していないので推測ですが。 Sub test131() Dim cat As New ADOX.Catalog Dim tbl As ADOX.Table Dim col As New ADOX.Column Dim i As Long cat.ActiveConnection = CurrentProject.Connection Set tbl = cat.Tables("テーブル名") With tbl.Columns For i = 2 To 10 .Append "F" & i, adVarWChar, 20 Next i End With Set cat = Nothing End Sub Sub test132() Dim cat As New ADOX.Catalog Dim tbl As ADOX.Table Dim col As New ADOX.Column Dim i As Long cat.ActiveConnection = CurrentProject.Connection Set tbl = cat.Tables("テーブル名") For i = 2 To 10 Set col = New ADOX.Column With col .Name = "F" & i .Type = adVarWChar .DefinedSize = 20 .Attributes = adColNullable End With tbl.Columns.Append col Set col = Nothing Next i Set cat = Nothing End Sub

nawvmaltyemj
質問者

お礼

どうもありがとうございました。