• 締切済み

VBでSQL文のUPDATE構文を使った時のエラーについて

こんにちは。全くのVB初心者ですが回答、ご指摘のほうよろしければお願いします。 Microsoft Visual Studio 2005でデータベース管理のアプリケーションを制作しているんですが、エラーが出て困っています。 本フォームの各Textboxの編集した値を、 利用者カルテフォーム(別フォーム)のDataGridViewとデータベースに反映させるというプログラミングにしようとしています。 以下のコードでデバッグしようとしても「UPDATE ステートメントの構文エラーです。」というエラーメッセージが出てきて実行できない状態です。 VB中学校というサイトのデータベース講座を参考にしました。 ------------------------------------------------------------ Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:xxxx.mdb") Dim SQLCm As OleDbCommand = Cn.CreateCommand Dim Table As DataTable = DirectCast(利用者カルテDataGridView1.DataSource, DataTable) Dim Row As DataRow Dim Adapter As New OleDbDataAdapter(SQLCm) Row = Table.NewRow Row("No") = NotextBox.Text Row("名前") = 名前TextBox.Text Row("フリガナ") = フリガナTextBox.Text Table.Rows.Add(Row) Dim SQL As String = "" SQL = "UPDATE 患者データ SET " SQL &= " No = " & Row("No") & "', " SQL &= " 名前 = '" & Row("名前") & "', " SQL &= " フリガナ= " & Row("フリガナ") & "', " SQL &= " WHERE " SQL &= " No = " & NotextBox.Text SQLCm.CommandText = SQL Cn.Open() ※SQLCm.ExecuteNonQuery() Cn.Close() 利用者カルテ.Show() Table.Dispose() Adapter.Dispose() SQLCm.Dispose() Cn.Dispose() End Sub ---------------------------------------------------------- 以上が実際にエラーがでる部分になります。 ※の部分で「UPDATE ステートメントの構文エラーです。」というエラーが指摘されています。 ちなみに他のフォームでINSERT文も使っているのですが、そちらは問題なく実行できる状態です。 初歩的な質問で申し訳ないですが、よければ回答のほうよろしくお願いします。

みんなの回答

  • zhaojie
  • ベストアンサー率100% (1/1)
回答No.3

> SQL &= " No = " & Row("No") & "', " SQL &= " No = '" & Row("No") & "', "

回答No.2

> SQL &= " No = " & Row("No") & "', " ここ,後ろにだけ'が付いています。 SQL &= " No = '" & Row("No") & "', " と前後につけるか, SQL &= " No = " & Row("No") & ", " どちらにもつけないか,一方にする必要があります。 なお,SQL Injectionの問題があるので,文字列を連結してSQLを組み立てるのではなく, System.Data.OleDb.OleDbParameter クラスを使ってパラメータ化することをお勧めします。

参考URL:
http://msdn.microsoft.com/ja-jp/library/system.data.oledb.oledbparameter.aspx
shiduka
質問者

補足

丁寧な回答ありがとうございます。 ここに書かれてるようにコードを修正したのですが、なぜか同じエラーが発生してしまいました。。 ------------------------------------------ SQL &= " No = '" & Row("No") & "', " と前後につけるか, SQL &= " No = " & Row("No") & ", " ------------------------------------------ この部分と、下の方が言ったことも含め一通り全部試してみたのですが、どれをやってもやはり同じエラーが発生してしまいます・・・ System.Data.OleDb.OleDbParameter クラスのほうも試してみたいと思いますが、このエラーの原因が分かってから着手したいと考えています。 身勝手で申し訳ないですが、もし何か思い当たることがあれば教えてください。無知で本当にすいません・・・。

  • equinox2
  • ベストアンサー率48% (321/660)
回答No.1

WHERE の直前には  & "', " は不要では・・

shiduka
質問者

お礼

回答ありがとうございます! おっしゃる通りWHEREの直前の"',"は不要だったようです。

関連するQ&A