DOBON.NETプログラミング道掲示板

No35582 の記事


■35582 / )  DataAdapter.Updateで構文エラー
□投稿者/ けい 一般人(11回)-(2024/03/11(Mon) 20:33:55)
  • アイコン環境/言語:[Windows10、VB.NET2022 ACCESS(Microsoft365)] 
    分類:[.NET] 

    お世話になります。

    Windows10、VB.NET2022で開発しています。

    ACCESSのテーブルAがあり、
    フィールドは[ID](主キー)と[フィールドP]とします。

    ソフトで、テーブルA全体のデータセットをSELECT文で取得し、
    1行ずつ、[フィールドP]を「値」で更新する処理を書いています。

    まずFor〜Nextループの中で、UPDATE文を使用してみます。

    Try〜Catch〜Finally、トランザクションはここでは省略します。

    System.Data.OleDb Ver8.0.0は、
    NuGetでインストール済です。

    -------------------------------------
    Private Sub TEST()
    Using cn As New OleDb.OleDbConnection(接続文字列)

    Dim da As OleDb.OleDbDataAdapter
    Dim ds As DataSet
    Dim dt As DataTable
    Dim dr() As DataRow
    Dim i As Integer
    Dim cmd As OleDbCommand

    Dim strSelect As String
    Dim strUpdate As String

    strSelect = "select * from [テーブルA]"
    da = New OleDbDataAdapter(strSelect, cn)
    ds = New DataSet
    da.Fill(ds, "テーブルA")
    dt = ds.Tables("テーブルA")
    dr = dt.Select

    For i = 0 To dr.Length - 1
    strUpdate = "update [テーブルA]" &
    " set [フィールドP]=[値] where [ID]=" & dr(i)("ID") & ""
    cmd = New OleDbCommand
    cmd.Connection = cn
    cmd.CommandText = strUpdate
    cmd.ExecuteNonQuery()
    Next

    End Using

    End Sub
    -------------------------------------

    この書き方ですと、更新処理は成功しますが、
    すでにテーブルAの特定行における処理をしている中で、
    UPDATE文のWHEREで再度同じ行を検索するような書き方になっています。

    なので、ここではDataAdapter.Updateの書き方で書きたいです。
    下記のように書いてみました。

    -------------------------------------
    Private Sub TEST()
    Using cn As New OleDb.OleDbConnection(接続文字列)

    Dim da As OleDb.OleDbDataAdapter
    Dim ds As DataSet
    Dim dt As DataTable
    Dim dr() As DataRow
    Dim cb As OleDbCommandBuilder
    Dim i As Integer
    Dim strSelect As String

    strSelect = "select * from [テーブルA]"

    da = New OleDbDataAdapter(strSelect, cn)
    ds = New DataSet
    da.Fill(ds, "テーブルA")
    dt = ds.Tables("テーブルA")
    dr = dt.Select

    cb = New OleDbCommandBuilder(da)

    For i = 0 To dr.Length - 1
    dr(i).BeginEdit()
    dr(i)("フィールドP") = [値]
    dr(i).EndEdit()
    Next

    da.Update(ds, "テーブルA")・・・※

    End Using

    End Sub
    -------------------------------------

    こちらですと、※の部分で構文エラーが出ます。

    ※をFor〜Nextループの中においても、エラーでした。

    BeginEdit、EndEditを外してもエラーです。

    以前VB.NET2012で開発していた際には、
    この書き方で更新処理ができたと思うのですが、
    おかしな部分がございますでしょうか。

    どうぞよろしくお願い申し上げます。

違反を報告
返信 削除キー/


Mode/  Pass/


- Child Tree -