- PR -

DataGridの値の取得

1
投稿者投稿内容
TOKI
会議室デビュー日: 2004/06/03
投稿数: 8
投稿日時: 2004-06-07 14:02
DataSetを使用し、DataGridに表示をしており、そのDataGridの値が変更されたら
DBに反映するようなプログラムを考えています。

知りたいことは
DataGrid内で値が変更されたCellはどこのCellなのか?
値が変更されたCell内の値を取得する方法は?
の2点です。

DataGrid.Item()で指定をしてやれば値の取得は出来るのですが
変更されるCellが一定とは限らないので・・・

かれこれ1週間以上MSDNと格闘しているのですがよくわかりません。
知っている方がいらっしゃいましたらご教授ください。

開発環境
==============================
Win2000 or XP
VB.NET
Oracle8i
==============================
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-06-07 15:00
 DataSetと連結しているんですよね?だったら、DataGridのどこかを知る必要はありません。DataSetに反映されています。

 DataSet、というか、DataRowにはRowStateというプロパティがあって、これを見ることでどの行が変更されたのか、知ることができます。また、DataAdapterクラスのUpdateメソッドを使うと、自動的にDataRow.RowStateの値によって、何もしない、削除する、挿入する、更新する、処理が行われます。
TOKI
会議室デビュー日: 2004/06/03
投稿数: 8
投稿日時: 2004-06-07 15:16
Jittaさん早速のお返事ありがとうございます。
前回も複数テーブル更新の件でお世話になりました。

引用:

Jittaさんの書き込み (2004-06-07 15:00) より:
 DataSetと連結しているんですよね?



はい、連結しています。
ですのでOleDbDataAdapter.Update(DataSet)といった形で更新をかけてみたのですが
複数テーブルを結合したビューのためか更新がうまくいきません。

その辺をご教授頂けると(もしくは参考となるような部分)非常に助かります。
自分でも前回の件を含め検索等をしているのですが、探し方がよくないのか
いまいち「これだっ」と思うものが見つからず、作業予定も遅れる一方です・・・
質問ばかりで申し訳ありませんがよろしくお願いします。



Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-06-07 17:41
引用:

TOKIさんの書き込み (2004-06-07 15:16) より:

ですのでOleDbDataAdapter.Update(DataSet)といった形で更新をかけてみたのですが
複数テーブルを結合したビューのためか更新がうまくいきません。


 OleDbDataAdapter.Update(DataSet, TableName As String)か、OleDbDataAdapter.Update(DataTable)を使ってください。DataSetを引数に取るのは、確かに、うまく動作しませんでした。
TOKI
会議室デビュー日: 2004/06/03
投稿数: 8
投稿日時: 2004-06-08 11:18
Jittaさん、お返事ありがとうございます。

一度その方法で試してみたいと思います。
TOKI
会議室デビュー日: 2004/06/03
投稿数: 8
投稿日時: 2004-06-08 16:09
上記のように実行してみたのですが以下のようなメッセージが出て更新できませんでした。

エラーメッセージ----------------------------------------
ORA-01776: 結合ビューを介して複数の基本表を変更できません
-------------------------------------------------------

あるHPで
1:INSERT INTO テーブル名
2:SERECT * FROM テーブル名
3:WHERE 1=2;
というSQL文を発行し、エラーが出る場合は更新できないといったことが
書いてあったのですが・・・

やはり複合ビューの更新は不可能なのでしょうか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-06-08 17:56
引用:

TOKIさんの書き込み (2004-06-08 16:09) より:

エラーメッセージ----------------------------------------
ORA-01776: 結合ビューを介して複数の基本表を変更できません
-------------------------------------------------------

やはり複合ビューの更新は不可能なのでしょうか?


 『J06261-02 Oracle9i SQLリファレンス』は、お手元にありますか?なければOTN Japanからダウンロードしてください。ダウンロードには、費用はかかりませんが、登録が必要です。
→ Oracle Technology Network > ドキュメント > Oracle9i Database

 これのP16-47に、更新可能なビューについて説明があります。これを読んで、更新可能なビューを作成してください。
#あれ?どこかでそう書いたよね?

 これに該当するビューを作成できない場合、一時表とPL/SQLによるストアドプロシージャで対応することになります。

 あと、思いつきで書いた、セミコロンでUPDATE文を複数記述するは、ダメでしたか?
TOKI
会議室デビュー日: 2004/06/03
投稿数: 8
投稿日時: 2004-06-11 11:15
お返事遅くなり申し訳ありません。

引用:

更新可能なビューを作成してください。
#あれ?どこかでそう書いたよね?



すいませんそうでした・・・
INSTEAD OF トリガーを作成して、いざ実行と思ったら権限不足(ORA-01031)で
作成することができず、権限の付与をお願いしたのですが、それ以外の方法で
作るよう指示があり振り出しに戻ってしまいました。

で考えたのですが
1.複数テーブルに対し、各々アダプターを使用してデータを取得
2.それらのデータを一つのデータセットに格納
3.そのデータセットをグリッドに表示

とすれば更新も問題ないのではと考えたのですが
アイデアとして浮かんだだけで実装可能かどうかもよく解りません。
こういったことは可能なのでしょうか?
また出来るのであればどういった形で行えばよいのでしょうか?
(DataTableとかTableMappingとかを使用するのかと思ったのですが・・・)
1

スキルアップ/キャリアアップ(JOB@IT)