dポイントプレゼントキャンペーン実施中!

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

A 回答 (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 & "]))"
かな?

この回答への補足

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

補足日時:2006/09/17 14:46
    • good
    • 0

#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()
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/09/19 22:58

お世話になります。



あれ...?
mysql.CommandText をセットした後、
mysql.ExecuteNonQuery()
が無い様な...

もし、ここに書くときにコピペし忘れであれば、
Console.WriteLine(mysql.CommandText)
等として データベースに実際に発行されている
SQL 文を確認されてはいかがでしょう。

例えば、その SQL 文をコピーして
直接 Access のクエリで発行して、ちゃんと
意図したとおりに動くかどうか等。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/09/16 12:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!