VB2010 SQL UPDATE文エラーの対処方法

このQ&Aのポイント
  • VB2010とAccess2007で使用している際に、データを日付順に連番を付けるコードを作成したところ、『UPDATE文構文エラーです』などのエラーが発生します。このエラーの対処方法について教えてください。
  • VB2010とAccess2007を使用し、データを日付順に連番を付けるコードを作成しました。しかし、実行すると『UPDATE文構文エラーです』というエラーが発生します。どのように修正すればよいでしょうか。
  • データを日付順に連番を付けるコードを作成していますが、VB2010とAccess2007を使用する際に『UPDATE文構文エラーです』というエラーが出てしまいます。このエラーを解決する方法を教えてください。
回答を見る
  • ベストアンサー

VB2010 SQLのUPDATE文エラー

VB2010とAccess2007で使用しています データを日付順に連番を付けるコードを作成したのですが『UPDATE文構文エラーです』等のエラーが発生します? ご教授お願いします。 Private Sub Button連番_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button連番.Click Dim DT As New DataTable Try Using OleCn As New OleDbConnection(mdbPath) Dim SQL As String = "" SQL = "SELECT * FROM tableA ORDER BY 依頼日" Using DA As System.Data.OleDb.OleDbDataAdapter = _ New System.Data.OleDb.OleDbDataAdapter(SQL, OleCn) DT.Clear() DA.Fill(DT) End Using End Using Using OleCn As New OleDbConnection(mdbPath) Dim SQL As String = "" SQL = "UPDATE tableA SET No = @no WHERE 登録ID_Export = @登録ID" Dim OleCmd As New OleDbCommand(SQL) OleCmd.Connection = OleCn OleCn.Open() OleCmd.Parameters.Add("@no", OleDbType.Integer) OleCmd.Parameters.Add("@登録ID", OleDbType.Integer) For i As Integer = 1 To DT.Rows.Count OleCmd.Parameters("@no").Value = i OleCmd.Parameters("@登録ID").Value = CInt(DT.Rows(i)("登録ID_Export").ToString) OleCmd.ExecuteNonQuery() Next i OleCmd.Dispose() OleCn.Dispose() End Using Catch ex As Exception MessageBox.Show(ex.ToString, "例外発生") Exit Sub End Try MsgBox("ok") End Sub

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

  • ベストアンサー
  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

SQL = "UPDATE tableA SET No = ? WHERE 登録ID_Export = ?" http://msdn.microsoft.com/ja-jp/library/system.data.oledb.oledbcommand.parameters(v=vs.71).aspx の「解説」参照

Alshark
質問者

お礼

ありがとうございます。 原因は不明でしたがフィールド名の『No』がだめだったみたいです。 名前変更したらうまく動作しました。

関連するQ&A

  • VB2010でのSQL日付フォーマット表記変更

    VB2010Expressを使用しています。 VBにてあるCSVファイルの内容をmdbファイルに移行するプログラムを作成しています DateTimePickerの日付を条件にしているんですがCSVの日付表記が『yyyymmdd』になっていて下記のコードでは『 (Me.Date日付.Text).ToString("yyyyMMdd")』の部分で『'String' から 'System.IFormatProvider' への変換時にランタイム エラーが発生する可能性があります。』とエラーが出ます。 自宅PCでは『(Me.Date日付.Text).ToString("yyyyMMdd")』を『DateAdd("d", 0, Me.Date健診日.Text).ToString("yyyyMMdd")』にしたらエラーなく動いたのですが、今日職場のPCで検証したら『型が合いません的なエラーが出てしまいます。(日付部分でのエラーみたいなのですが職場でのエラーをメモし忘れました、スイマセン) 日付のフォーマット変更そしてPCの違いによるエラーの発生原因についてご教授お願いします。 Try Dim DT As New DataTable '===============CSVからクエリ=============== Using OleCn As New System.Data.OleDb.OleDbConnection OleCn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FolderPath & _ ";Extended Properties=""Text;HDR=YES;IMEX=1;FMT=Delimited""" Dim SQL As String = "" SQL = "SELECT * FROM " + CSVFileName + " WHERE 日付 BETWEEN " + DateAdd("d", -1, Me.Date日付.Text).ToString("yyyyMMdd") + " AND " + (Me.Date日付.Text).ToString("yyyyMMdd") Using DA As System.Data.OleDb.OleDbDataAdapter = _ New System.Data.OleDb.OleDbDataAdapter(SQL, OleCn) DT.Clear() DA.Fill(DT) End Using End Using '===============CSV-importへの登録=============== コード省略 Catch ex As Exception MessageBox.Show(ex.ToString, "例外発生") Exit Sub End Try

  • VB2010でCSV取込

    VB2010とAccessを使用しています。 あるCSVファイルからACCESSへデータ取り込みをしようとして CSVをデータテーブルに代入するコードを考えているのですが 下記のコードでは『FROM句』のエラーのようでうまく作動しません? ご教授お願いします。 Private Sub ToolMenu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolMenu.Click Dim OFD As New OpenFileDialog OFD.FileName = "" OFD.InitialDirectory = "\\10.20.100.35\data\LOG\" OFD.Filter = "CSVファイル(*.csv)|*.csv|すべてファイル(*.*)|*.*" OFD.FilterIndex = 1 OFD.Title = "取り込むCSVファイルを選択してください" OFD.RestoreDirectory = True OFD.CheckFileExists = True OFD.CheckPathExists = True If OFD.ShowDialog() = DialogResult.OK Then Try Dim DT As New DataTable '===============CSVからクエリ=============== Using OleCn As New System.Data.OleDb.OleDbConnection Dim CSVFileName As String = System.IO.Path.Combine(OFD.InitialDirectory, "aaa.csv") OleCn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & OFD.InitialDirectory & _ ";Extended Properties=""Text;HDR=YES;IMEX=1;FMT=Delimited""" Dim SQL As String = "" SQL = "SELECT * FROM " + CSVFileName Using DA As System.Data.OleDb.OleDbDataAdapter = _ New System.Data.OleDb.OleDbDataAdapter(SQL, OleCn) DT.Clear() DA.Fill(DT) End Using End Using Catch ex As Exception MessageBox.Show(ex.ToString, "例外発生") Exit Sub End Try End If End Sub

  • 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文も使っているのですが、そちらは問題なく実行できる状態です。 初歩的な質問で申し訳ないですが、よければ回答のほうよろしくお願いします。

  • VB.netでJet.OLEDBを使いCSVを読み

    VB.netでOleDbConnectionを使ってCSVを読み込むと便利ですが、属性判定を勝手にされたくありません。 どうすればコントロールできますか? 個別に属性を決めるか、もしくは全部文字列として受け取りたいです。 何もしなければ、項目の属性が自動で決まりますが、その属性判断が甘く、属性に合わない値が消えます。 例えば、 日付項目っぽい値が入っている項目にたまに文字列がるとすると、 その項目が日付項目になって、日付項目に合わないデータは空白になってしまいます。 CSVの読み込みは一旦すべて文字列にして受け取り、その後の事はアプリでコントロールしたいです。 どうすればできますか? Dim OleDbConnection1 As New OleDb.OleDbConnection Dim OleDbCommand1 As New OleDb.OleDbCommand Dim OleDbDataAdapter1 As New OleDb.OleDbDataAdapter Dim FileInfo1 As New FileInfo(CSVファイルの名前をフルパスで) OleDbConnection1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=" & FileInfo1.DirectoryName & "\;" _ & "Extended Properties=" & ControlChars.Quote & "Text;HDR=No;FMT=Delimited" & ControlChars.Quote OleDbConnection1.Open() OleDbCommand1.CommandText = "SELECT * FROM [" & FileInfo1.Name & "]" OleDbCommand1.Connection = OleDbConnection1 OleDbDataAdapter1.SelectCommand = OleDbCommand1 OleDbDataAdapter1.Fill(DataTable1) OleDbDataAdapter1.Dispose() OleDbCommand1.Dispose() OleDbConnection1.Dispose()

  • vb.net で ADO でアクセスのテーブル

    アクセスのテーブルのレコードの数を取得したいのですが コードがわからないので続きを教えていただけますか? Imports System.Data.OleDb Sub test() Dim oleConn As OleDbConnection Dim oleCmd As OleDbCommand Dim oleAdp As OleDbDataAdapter oleConn = New OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0;" & "Data Source=C:\Database1.accdb;") oleCmd = oleConn.CreateCommand() oleCmd.CommandText = "SELECT * FROM テーブル1" oleAdp = New OleDbDataAdapter(oleCmd) 'MsgBox oleCmd.??? End Sub までできたのですが、ここからどうすれば数を取得できますか?

  • SQL パラメーターの表示について

    度々お世話になります Windows7、VB2010(Windowsフォーム)、SQL Server で開発し、XPと7で画面を動かします 今、SQLでパラメータを使っており、エラー処理で困っております SQLのパラメータの内容が表示されない(SQLが、「~~~~ WHERE KEN_ID = @KEN_ID」そのままになり、「~~~~  KEN_ID = '01'」等にならない) です Dim sql As New StringBuilder Dim ds As DataSet Using con As New Common.DB(Common.Values.ConnectionString) Try sql.Append("SELECT KEN_NAM FROM KEN_M") sql.Append(" WHERE") sql.Append(" KEN_ID = @KEN_ID") con.ClearParameter() con.AddParameter("KEN_ID", strKenName) ds = con.GetDataSet(sql.ToString) Return dt Catch ex As Exception 'Throw New Exception(ex.ToString & vbCrLf & sql.ToString) MsgBox("県取得処理" & vbcrlf & Sql.Tostring) End Try End Using ---- ↓ 別プロジェクト ↓ --- Public Function GetDataSet(ByVal sql As String) As DataSet      Command.CommandText = sql      If String.IsNullOrEmpty(Command.CommandText) Then     Throw New Exception("SQLが指定されていません") End If Dim adapter As New SqlDataAdapter(Command) Try adapter.Fill(ds) Return ds Catch ex As Exception Throw New Exception("DataSetオブジェクトの取得に失敗しました。", ex) End Try と書いております よろしくお願いします

  • DataTableの値を変数に代入したい

    DataTableの値を変数に代入したい 以下のコードのにてDBから『職員ID』・『氏名』を取得しSyokuin(,)の2次元配列に代入したいのですが Do Loopのところで『オブジェクト参照がオブジェクトインスタンスに設定されていません』とエラーが出ます。 ほかのところでほぼ同様のコードでデータグリッドビューに表示はうまくいくんですが? Using OleCn As New OleDbConnection(省略) Using OleCmd As New OleDbCommand(省略) Using OleDAdp As New OleDb.OleDbDataAdapter() OleCmd.Connection = OleCn '配列取得 OleDAdp.SelectCommand = OleCmd OleDAdp.Fill(OleDSet, "職員") Dim i As Integer = 0 Dim jAs Integer = 0 Do Until j= OleDSet.Tables("職員").Columns.Count - 1   Do Until i = OleDSet.Tables("職員").Rows.Count - 1   Syokuin(j, i) = OleDSet.Tables("職員").Rows(i)(j)   i += 1   Loop j += 1 Loop End Using End Using End Using ご教授お願いします

  • VB2008データベース

    非接続型データベースでUpdateをする文を書いていますがUpdateでエラーが出てしまいます。  OleDbCommandBuilder の参照をネットで確認等していますがエラーの内容がわかりません。 データベース参考書等にも下記と同じ文例でかいてあります。 どなたか教えてください。 *VB2008で開発しています。 Dim cn As OleDb.OleDbConnection Dim Buf As String Dim dAdp As OleDb.OleDbDataAdapter Dim dSet As DataSet Dim dTbl As DataTable Dim cBuild As OleDb.OleDbCommandBuilder Buf$ = DefCnSt$ & X_SystemFile$ & ";Jet OLEDB:Database Password=" & XdtPs$ cn = New OleDb.OleDbConnection(Buf$) dAdp = New OleDb.OleDbDataAdapter("SELECT * FROM 物件", cn) dSet = New DataSet("物件") dAdp.Fill(dSet, "物件") dTbl = dSet.Tables("物件") dTbl.Rows(2)(1) = "ABC" cBuild = New OleDb.OleDbCommandBuilder(dAdp) dAdp.Update(dSet, "物件") <-ここでエラーが出ます。

  • VBでSQLを使い検索をしたいのですが。

    VBでSQLを使い検索をしたいのですが、SELECT文の使い方が分かりません。 下記の記述で、番号、氏名、電話番号をそれぞれのTEXTBOX1,TEXTBOX2,TEXTBOX3の ように各容器にいれたいのでが分かりません。 文をその文増やせばいいのでしょうか、SELECT文1行で複数の結果を受け取る方法を教えて下さい。 宜しくお願い致します。 Dim Adapter As New OleDbDataAdapter(SQLCm) Dim Table As New DataTable Dim name As String Dim selcomd As String Dim Value As String name = TextBox11.Text selcomd = "SELECT 番号,氏名,電話番号  FROM meishi WHERE 氏名 like '" & name & "' " SQLCm.CommandText = selcomd

  • VBにExcelを読み込む

    VBにExcelデータを取り込んでからSQL ServerにINSERTしたいんですが、 読み込みに時間がかかりすぎるんですが、どういったやり方だとうまくいきますか? データをまとめてVBに取得できればいいんですが。 Accessだとちょっと問題があって出来ない。 Private Sub Excel() Dim i, j As Integer Dim dSet As DataSet = New DataSet Dim dAdp As OleDb.OleDbDataAdapter Dim cn As OleDb.OleDbConnection Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Dim SQL As String Dim Seru1 As String Dim Seru2 As String Dim Seru3 As String cn = New OleDb.OleDbConnection( _ "provider=Microsoft.Jet.OLEDB.4.0; " & _ "data source='" & lblファイル.Text & "'; " & _ "Extended Properties=Excel 8.0;") '「Sheet1」シートのデータを取得する dAdp = New OleDb.OleDbDataAdapter("SELECT * FROM [Sheet1$]", cn) dAdp.Fill(dSet) For i = 0 To dSet.Tables(0).Rows.Count() - 1 For j = 0 To dSet.Tables(0).Columns.Count() - 1 Debug.Write(dSet.Tables(0).Rows(i)(j) & ControlChars.Tab) Next Debug.WriteLine("") xlApp = CreateObject("Excel.Application") 'xlApp.Visible = True 'アプリケーションの表示 'Set book = app.Workbooks.Add '新規作成 xlBook = xlApp.Workbooks.Open(lblファイル.Text) 'ファイルを開く xlSheet = xlBook.Worksheets(1) 'シート1を選択 'Debug.WriteLine(xlSheet.Cells(1, 1).Value) '値を読み出す Seru1 = i Seru2 = i Seru3 = i If Not i = 0 Then If Not i = 1 Then sqlConn = objclass2.gFunc_OpenSqlConn() sqlCmd = sqlConn.CreateCommand() '初期化 imtxtExcelコード2.Text = "" imtxtExcel1.Text = "" imtxtExcelコード1.Text = "" '読み出し imtxtExcelコード2.Text = xlSheet.Range("A" + Seru1).Value imtxtExcel1.Text = xlSheet.Range("B" + Seru2).Value imtxtExcelコード1.Text = xlSheet.Range("C" + Seru3).Value SQL = "" SQL = SQL & "INSERT INTO W_Excel( " SQL = SQL & "コード1,コード2,備考 ) " SQL = SQL & "SELECT " SQL = SQL & "'" & imtxtExcelコード2.Text & "'," SQL = SQL & "'" & imtxtExcel1.Text & "'," SQL = SQL & "'" & imtxtExcelコード1.Text & "'" sqlCmd.CommandText = SQL sqlCmd.ExecuteNonQuery() End If End If xlSheet = Nothing xlBook.Close() 'Book を閉じる xlBook = Nothing xlApp.Quit() 'Quit メソッドを使って Excel を終了します。 xlApp = Nothing Next End Sub End Class

専門家に質問してみよう