- ベストアンサー
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
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
フィールド名がダブっていませんか? 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 & "]))" かな?
その他の回答 (2)
- temtecomai2
- ベストアンサー率61% (656/1071)
#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()
お礼
ありがとうございます。 おかげさまで、分かりました。 参考にしながらDBを作り直したら無事にうごきました。 どうやら、DBが物理的に壊れていたみだいです。
- naganaga_001
- ベストアンサー率71% (172/242)
お世話になります。 あれ...? mysql.CommandText をセットした後、 mysql.ExecuteNonQuery() が無い様な... もし、ここに書くときにコピペし忘れであれば、 Console.WriteLine(mysql.CommandText) 等として データベースに実際に発行されている SQL 文を確認されてはいかがでしょう。 例えば、その SQL 文をコピーして 直接 Access のクエリで発行して、ちゃんと 意図したとおりに動くかどうか等。
お礼
回答ありがとうございます。 すみません、mysql.ExecuteNonQuery()を付け忘れていました。つけて実行してみたのですがSystem.Data.OleDb.OleDbException' のハンドルされていない例外が system.data.dll で発生しました。と言うエラーが発生しました。 アドバイスをお願いします。
補足
回答ありがとうございます。 実行したのですがやはり、System.Data.OleDb.OleDbException' のハンドルされていない例外が system.data.dll で発生しました。 というエラー発生しました。 これは、SQL文以外の場所でなにか問題があるのでしょうか? よろしくお願いします