DataGridViewの更新がうまくいきません。

タグの編集
投稿者 Jptaro  (社会人) 投稿日時 2013/6/10 21:15:20
たびたびお世話になっております。

DataGridViewの更新がうまくいきません。

データべースとしてAccessを利用しています。
DataGridView1は、テーブルの基礎全データを表示しています。
DataGridView2は、テーブルの補修歴を表示しています。
2つのテーブルは、管理番号でリンク設定されています。

[更新ボタン]に下記のコードを記述したのですが
クリックすると、DataGridView1は、更新されていますがDataGridView2が更新されずに
エラー「更新には、変更された行を含むDataRowコレクションが渡されたとき
有効な UpdateCommand が必要です。」と表示されます。
この意味が判りません。何をチェックすればよいか、ご指導をお願いいたします。
(デバッグの方法が、わからないのです)

現象の詳細
①DataGridView1側だけ修正して、[更新ボタン]をクリックすると、Accessのテーブル
  (基礎全データ)は正しく更新されています。
②DataGridView2側を変更すると、上記のエラーが発生します。
③エラーは、 補修歴TableAdapter.Update(台帳DataSet1.補修歴)
  で発生しています。

Win 7 Pro
VB2010
Access2010

--------------------------
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 削除変更を有効.Click
  Try
    基礎全データTableAdapter1.Update(台帳DataSet1.基礎全データ)
    補修歴TableAdapter.Update(台帳DataSet1.補修歴)
    ShowList()
  Catch ex As Exception
    MessageBox.Show(ex.Message, "更新できません")
  End Try
End Sub
--------------------------------
投稿者 (削除されました)  () 投稿日時 2013/6/10 22:03:04
(削除されました)
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2013/6/10 22:07:07
> DataGridViewの更新がうまくいきません。 
DataGridView は、表示と編集を行いますが、データベースの読み書きとは無関係です。
データベース操作に必要なのは、「TableAdapter」や「DataAdapter」なので、
DataGridView についてではなく、ADO.NET について調査を進めてみてください。


> エラー「更新には、変更された行を含むDataRowコレクションが渡されたとき
> 有効な UpdateCommand が必要です。」と表示されます。

型付DataSet を使っておられますよね。
そのデザイナを開き、補修歴の方のTableAdapter に対して、
UpdateCommand / InsertCommand / DeleteCommandプロパティが
正しく設定されているかを確認してみてください。
http://support.microsoft.com/kb/310376/ja

UpdateCommand には、行更新のための UPDATE SQL、
DeleteCommand には、行削除のための DELETE SQL、
InsertCommand には、行追加のための INSERT SQL が
それぞれ必要となります。 


> (基礎全データ)は正しく更新されています。
おそらく、基礎全データの方の TableAdapter は正しく設定されているのでしょう。
投稿者 J  (社会人) 投稿日時 2013/6/11 09:55:08
魔界の仮面弁士 さん、再びお世話になります。

>そのデザイナを開き、補修歴の方のTableAdapter に対して、
>UpdateCommand / InsertCommand / DeleteCommandプロパティが
>正しく設定されているかを確認してみてください。
ご指摘の通りでした。

>おそらく、基礎全データの方の TableAdapter は正しく設定されているのでしょう。
これも、ご指摘の通りです。(ただし、自分で設定した記憶はないのですが、)

1点、お伺いします。
補修歴の方のTableAdapter に対して、UpdateCommand / InsertCommand / DeleteCommandプロパティを設定したのですが
DeleteCommand設定時のクエリビルダーで
上部の テーブル補修歴の表に各フィールド名がリストされてます。
しかし、その下の、リスト部分の列には、なにも表示されず
その下のコマンド欄には Delete From 補修歴 とだけ表示されています。
これは、正しいでしょうか?

よろしくお願いいたします。

よろしくお願いいたします。
投稿者 Jptaro  (社会人) 投稿日時 2013/6/11 21:41:30
先の投稿で J とあったのは、私で Jptaro です

>1点、お伺いします。
>補修歴の方のTableAdapter に対して、
は、私のミスでした。
補修歴の方のTableAdapter を再見直しして修正したら直りました。

解決とさせていただきます。
魔界の仮面弁士 さん、再びお世話になりました。
VB2010は、奥行きが広いのか?難解なのか?よくわかりませんが
勉強の仕方について、アドバイスをいただけたらと思っています。
最近は、HELPやMSのMSDNを見に行くようになりましたが
行き着くまで、まだ、大変です。

ありがとうございました。
また当サイトの運営者さんにも、感謝いたします。