• 締切済み

データベースの更新を行うには?

はじめまして。下記の問題についてご教授願いします。 ■環境 OS:XP SP2 開発環境:VSDE2008(SP1)のVB2008 .NET Framework:3.0 データベース:Access2002でmdb作成 ■概要 プロジェクト作成後、フォームにデータテーブルの列の要素をドロップし、 バインディングによりフォームを作成しています。 起動時に入力フォームにデータを入力しBindingNavigatorコントロールにより新規追加/削除/保存を行うプログラムです。 ■問題点 新規追加→データを入力→保存 の場合はデータベースは更新されるのですが、 データベースに保存されているデータを編集→保存 の場合は"InvalidOperationExceptionはハンドルされませんでした。 更新には、変更された行を含む DataRow コレクションが渡されたとき、有効な UpdateCommand が必要です。"とエラーになり更新できません。 データベースに保存されているデータを削除→保存 の場合は"InvalidOperationExceptionはハンドルされませんでした。 更新には、変更された行を含む DataRow コレクションが渡されたとき、有効な DeleteCommand が必要です。"とエラーになり更新できません。 TableAdapterを使用しているのですが、UpdateCommand,DeleteCommandは作成作成されないのでしょうか? ■コード Imports System.Data.OleDb Public Class CustomerForm Private Sub CustomerForm_Load(ByVal sender As_ System.Object,ByVal e As System.EventArgs) Handles MyBase.Load Dim strSQL As String = "SELECT * From customer" Dim Cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0/以下省略) Me.CustomerTableAdapter.Fill(Me.OrderDataSet.customer) End Sub Private Sub BindingNavigatorMoveFirstItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles       BindingNavigatorMoveFirstItem.Click CustomerBindingSource.MoveFirst() End Sub Private Sub BindingNavigatorMovePreviousItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BindingNavigatorMovePreviousItem.Click CustomerBindingSource.MovePrevious() End Sub Private Sub BindingNavigatorMoveNextItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BindingNavigatorMoveNextItem.Click CustomerBindingSource.MoveNext() End Sub Private Sub BindingNavigatorMoveLastItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BindingNavigatorMoveLastItem.Click CustomerBindingSource.MoveLast() End Sub Private Sub BindingNavigatorAddNewItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BindingNavigatorAddNewItem.Click CustomerBindingSource.AddNew() End Sub Private Sub BindingNavigatorDeleteItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BindingNavigatorDeleteItem.Click If MsgBox("削除してもよろしいですか", MsgBoxStyle.YesNo + MsgBoxStyle.DefaultButton2) = MsgBoxResult.Yes Then CustomerBindingSource.RemoveCurrent() End If End Sub Private Sub CustomerBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CustomerBindingNavigatorSaveItem.Click, Me.FormClosing Me.Validate() If HandleInputError() = False Then If TypeName(e) = "FormClosingEventArgs" Then DirectCast(e, FormClosingEventArgs).Cancel = True End If Return End If Me.CustomerBindingSource.EndEdit() Me.TableAdapterManager.UpdateAll(Me.OrderDataSet) End Sub ■データベースファイル order.mdb 商品テーブル id name address phoneの4列 idが主キーでオートナンバーに設定してます。

みんなの回答

  • oboroxx
  • ベストアンサー率40% (317/792)
回答No.1

TableAdapterをどのように作成したのでしょうか? BindingSourceでデータソースを指定する時に、テーブルの指定でそこで○○TableAdapterが自動で作られる時にDeleteCommandが同時に作成されているはずなのですが、確認する方法を示します。 ○○DataSetをクリックすると右上に三角ボタンが出ると思います。 それをクリックすると「データセット デザイナで編集」が出るはずなのでこれを選びます。 すると画面が変わって、テーブル構成の下に○○TableAdapterという項目がウィンドウ内に出るはずです。 そこの「○○TableAdapter」をクリックするとプロパティウィンドウにDeleteCommandがあるはずです。 そこの内容を確認してください。 もしかすれば、誤って消してしまった可能性もありますので、その時はBindingSourceを再度作りなおしてみてください。 その時、プロジェクトファイルの中にある、○○DataSet.xsdを削除してください。 これが一旦消さないと再度作りなおされないと思われます。 がんばってください。

関連するQ&A

専門家に質問してみよう