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

Updateについて。

  • 題名: Updateについて。
  • 著者: とおる
  • 日時: 2005/10/22 14:52:52
  • ID: 13409
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[Windows XP  使用言語(VB.NET)]
分類:[.NET]

お世話になります。
早速ですが、今DataGridを使い更新をしようとしてるんですが、
ボタンをして更新しようとすると、「更新でTableMappings['商品マスタ2']、またはDataTable'商品マスタ2'がみつかりませんでした。」
とでてしますのです。
コードは、
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim oConn As New OleDbConnection
Dim oCommand As New OleDbCommand
Dim oDataAdapter As New OleDbDataAdapter

Dim oDataSet As DataSet = New DataSet("商品マスタ2")
Dim oDataTable As New DataTable

Try
oCommand.Connection = oConn

Const strSelectSeito As String = "UPDATE 商品マスタ2 SET
      フィールド1 = ?, フィールド2 = ?, フィールド3 = ?,
      フィールド4 = ? WHERE (I" & _
  D = ?) AND (フィールド1 = ? OR ? IS NULL AND フィールド1 I        S NULL) AND (フィールド2 = ? OR" & _
  " ? IS NULL AND フィールド2 IS NULL) AND (フィールド3 = ?         OR ? IS NULL AND フィールド3 IS " & _
  "NULL) AND (フィールド4 = ? OR ? IS NULL AND フィールド4 IS        NULL)"

oCommand.CommandText = strSelectSeito

oDataAdapter.UpdateCommand = oCommand

oDataSet.Clear()

oDataAdapter.Update(oDataSet, "商品マスタ2")
oDataTable = oDataSet.Tables("商品マスタ2")
DataGrid1.SetDataBinding(oDataSet, "商品マスタ2")

Catch ex As Exception
MessageBox.Show(ex.ToString, "エラー")

Finally
If Not oConn Is Nothing Then
oConn.Close()
End If
End Try

End Sub
のよよに記述したのですが、うまくいきません。
何か良い意見が聞けたらと思い投稿しました。
よろしくお願いします。
あと、DataGridに配列を組んで、一つ一つデータを読みこんでくることはできるのでしょうか??
お願いします。
お世話になります。

■No13409に返信(とおるさんの記事)
> Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
> Dim oConn As New OleDbConnection
> Dim oCommand As New OleDbCommand
> Dim oDataAdapter As New OleDbDataAdapter
>
> Dim oDataSet As DataSet = New DataSet("商品マスタ2")
> Dim oDataTable As New DataTable
>
> Try
> oCommand.Connection = oConn
>
> Const strSelectSeito As String = "UPDATE 商品マスタ2 SET
>       フィールド1 = ?, フィールド2 = ?, フィールド3 = ?,
>       フィールド4 = ? WHERE (I" & _
>   D = ?) AND (フィールド1 = ? OR ? IS NULL AND フィールド1 I        S NULL) AND (フィールド2 = ? OR" & _
>   " ? IS NULL AND フィールド2 IS NULL) AND (フィールド3 = ?         OR ? IS NULL AND フィールド3 IS " & _
>   "NULL) AND (フィールド4 = ? OR ? IS NULL AND フィールド4 IS        NULL)"
>
> oCommand.CommandText = strSelectSeito

これ以降に以下のようにすればDataTableを取れると思いますが。

Dim iCount As Integer = oCommand.ExecuteNonQuery()

Dim selectCommand As OleDbCommand = New OleDbCommand
selectCommand.CommandType = TableDirect
selectCommand = "商品マスタ2"
selectCommand.Connection = oConn

oDataAdapter.SelectCommand = selectCommand
oDataAdapter.Fill(oDataSet)
oDataTable = oDataSet.Tables("商品マスタ2")

> あと、DataGridに配列を組んで、一つ一つデータを読みこんでくることはできるのでしょうか??

すみません、ちょっと仰られている事が
わからないのですが…「配列を組んで」とは?
■No13410に返信(なおこ(・∀・)さんの記事)
> なおこさん返信遅くなってすみません。>
すみませんごしてきうけたとおりにしてみましたが、また同じエラーがでてきてしましました。
自分なりに色々調べてはいるのですが、ツールボックスData内のDataAdapterなどを使ってはできているのですが・・・・・
なぜ、「更新でTableMappings['商品マスタ2']、またはDataTable'商品マスタ2'がみつかりませんでした。」このようなエラーメッセージが返ってくるのかもいまいちわかっていません。。
どうかご教授願えればと思います。
よろしくお願いします。
お世話になります。

■No13453に返信(とおるさんの記事)
すみません。
ちょっと今よく見直してみたら、
oConn.Open()がなかったみたいですが…
あと、
UPDATE 商品マスタ2 SET フィールド1 = ?, …
の?に対応するOleDbParameterもセットし忘れですね。
抜けてました。ごめんなさい。

で、以下のコードを書いて動かしたら一応動きました。
ご参考になれば…。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  Dim oleConnection As OleDb.OleDbConnection

  Try
    oleConnection = New OleDb.OleDbConnection
    oleConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db1.mdb;"
    oleConnection.Open()

    'update
    Dim updateCommand As OleDb.OleDbCommand
    updateCommand = New OleDb.OleDbCommand
    updateCommand.Connection = oleConnection
    updateCommand.CommandText = "UPDATE 商品マスタ2 SET フィールド1=?;"
    Dim updateParameter1 As OleDb.OleDbParameter
    updateParameter1 = New OleDb.OleDbParameter("param1", OleDb.OleDbType.VarChar)
    updateParameter1.Value = "test"
    updateCommand.Parameters.Add(updateParameter1)
    Dim iResult As Integer
    iResult = updateCommand.ExecuteNonQuery()
    Console.WriteLine("Update件数:" + iResult.ToString() + "件")

    'select
    Dim selectCommand As OleDb.OleDbCommand
    selectCommand = New OleDb.OleDbCommand
    selectCommand.Connection = oleConnection
    selectCommand.CommandType = CommandType.TableDirect
    selectCommand.CommandText = "商品マスタ2"

    Dim da As OleDb.OleDbDataAdapter
    da = New OleDb.OleDbDataAdapter
    da.SelectCommand = selectCommand

    Dim ds As DataSet = New DataSet
    Dim dt As DataTable
    da.Fill(ds, "商品マスタ2")
    dt = ds.Tables("商品マスタ2")
    Console.WriteLine("Select件数:" + dt.Rows.Count.ToString() + "件")
  Finally
    If Not oleConnection Is Nothing Then
      oleConnection.Close()
      oleConnection.Dispose()
    End If
  End Try
End Sub
なおこさんありがとうございます。
一応試してみたのですが、参照ボタンを押し、データはとってきているのですが、
やはり更新ボタンをおし、閉じてからまたひらいてみると更新されていないようです。。。。
  • 題名: Re[5]: Updateについて。
  • 著者: とおる
  • 日時: 2005/11/01 9:27:52
  • ID: 13564
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
なおこさんありがとうございます。
遅くなって申し訳ないです。
なんとかやっとできあがりました。
またなにかあったらよろしくお願いします。

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