• ベストアンサー

VB.NETでテーブルを作成

VB.NETとAcceseを使用してフォームの入力内容に基にボタンをしてDBにテーブルを作成するプログラムを作成していますが上手くいきません。 どのようにすれば上手くいくのか教えてください。 よろしくお願いします。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Cn As New OleDb.OleDbConnection() Cn.ConnectionString = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=" & Application.StartupPath & "\products.mdb" Cn.Open() Dim mysql As New OleDb.OleDbCommand() mysql.Connection = Cn mysql.CommandText = "CREATE TABLE '" & TextBox1.Text & "' ('" & TextBox2.Text & "' '" & ComboBox1.Text & "' NOT NULL,'" & TextBox2.Text & "' '" & ComboBox2.Text & "','" & TextBox3.Text & "' '" & ComboBox3.Text & "',PRIMARY KEY('" & TextBox1.Text & "'))" Cn.Close() End Sub

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

  • ベストアンサー
回答No.2

フィールド名がダブっていませんか? TextBox1:テーブル名 TextBox2:フィールド名 TextBox3:フィールド名 ComboBox1:型 ComboBox2:型 TextBox2 を 2つ作ろうとしています。 もう一つ。 シングルクォーテーションを使っていますが、 テーブル名とフィールド名は [フィールド名] てな感じで。 型の部分は裸で。 総合すると、 mysql.CommandText = "CREATE TABLE [" & TextBox1.Text & "] ([" & TextBox2.Text & "] " & ComboBox1.Text & " NOT NULL,[" & TextBox3.Text & "] " & ComboBox2.Text & ",[" & TextBox4.Text & "] " & ComboBox3.Text & ",PRIMARY KEY([" & TextBox1.Text & "]))" かな?

rie1218
質問者

補足

回答ありがとうございます。 実行したのですがやはり、System.Data.OleDb.OleDbException' のハンドルされていない例外が system.data.dll で発生しました。 というエラー発生しました。 これは、SQL文以外の場所でなにか問題があるのでしょうか? よろしくお願いします

その他の回答 (2)

回答No.3

#2 で回答した内容の訂正です。 ",PRIMARY KEY([" & TextBox1.Text & "]))" の部分は ",PRIMARY KEY([" & TextBox2.Text & "]))" ですね。 TextBox1 はテーブル名としたんでした。 で、私のところで試した際に生成された SQL 文は下記のとおりです。 CREATE TABLE [testTable] ([m01ID] INTEGER NOT NULL,[m02EmpID] INTEGER,[m02EmpName] STRING(30),PRIMARY KEY([m01ID])) これを VB.NET で実行してもきちんとテーブルが作成されましたし、Access のクエリの SQL ビューで実行してもテーブルが作成されました。 ご自分のアプリで、Command オブジェクトの ExecuteNonQuery() を実行する前に Debug.WriteLine(mysql.CommandText) を挿入し、イミディエイト ウィンドウに出力された SQL 文を Access で実行してみてください。 (またはこの回答の補足あたりに提示してみてください) ちなみにサンプルで作った VB.NET のコードはこんなです。 OleDbCommand1.CommandType = CommandType.Text OleDbCommand1.Connection = OleDbConnection1 OleDbCommand1.CommandText = "CREATE TABLE [" & TextBox1.Text & "] ([" & TextBox2.Text & "] " & ComboBox1.Text & " NOT NULL,[" & TextBox3.Text & "] " & ComboBox2.Text & ",[" & TextBox4.Text & "] " & ComboBox3.Text & ",PRIMARY KEY([" & TextBox2.Text & "]))" Debug.WriteLine(OleDbCommand1.CommandText) OleDbCommand1.Connection.Open() OleDbCommand1.ExecuteNonQuery() OleDbCommand1.Connection.Close()

rie1218
質問者

お礼

ありがとうございます。 おかげさまで、分かりました。 参考にしながらDBを作り直したら無事にうごきました。 どうやら、DBが物理的に壊れていたみだいです。

回答No.1

お世話になります。 あれ...? mysql.CommandText をセットした後、 mysql.ExecuteNonQuery() が無い様な... もし、ここに書くときにコピペし忘れであれば、 Console.WriteLine(mysql.CommandText) 等として データベースに実際に発行されている SQL 文を確認されてはいかがでしょう。 例えば、その SQL 文をコピーして 直接 Access のクエリで発行して、ちゃんと 意図したとおりに動くかどうか等。

rie1218
質問者

お礼

回答ありがとうございます。 すみません、mysql.ExecuteNonQuery()を付け忘れていました。つけて実行してみたのですがSystem.Data.OleDb.OleDbException' のハンドルされていない例外が system.data.dll で発生しました。と言うエラーが発生しました。 アドバイスをお願いします。