- - PR -
1対多のリレーション
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-08-01 18:37
マスター(Table)
ID 項目名(例:住所、TEL、FAX) データ(Table) 名簿ID(WHERE句で絞ります) ID(マスターの項目名を引っ張ってきます) 値 名簿のようなもので、項目は追加削除可能です。 1人にマスターに存在する個数の項目と値のセットを登録するイメージです。 説明がうまくできなくて申し訳ないです。 よろしくお願いします。 | ||||||||
|
投稿日時: 2008-08-01 22:55
select
D.名簿ID, D.ID, M.項目名, D.値, その他必要な項目 from データ D left join マスター M on M.id = d.id update データ set 値=? where id=? and 名簿ID=? delete from データ where id=? and 名簿ID=? じゃない? | ||||||||
|
投稿日時: 2008-08-05 10:30
返事が遅くなりました。
どうやら、DataViewがビューではなく、DataSet内のDataTableがビューとして扱われていて、それをテーブルと呼称していることが紛らわしかったようです。 単純にFillする時にテーブル名(ビューの名前)を指定してUpdate時にもテーブル名(ビューの名前)を指定することで問題なく更新できました。 しかし、本当にジョインしたビューを表示させるDataSetに対して、そのうちの1つのテーブルだけを更新するUpdateが可能(この辺はJittaさまの返信のお陰で確信が持てました)だとは確かに便利になったと思いました。 クラス名(やメソッド等)の命名には十分に気をつけるように警鐘していたのはマイクロソフトさんだと思いましたが・・・本末転倒ですねw いろいろ勉強になりました。 みなさん、ありがとうございました。 | ||||||||
|
投稿日時: 2008-08-05 21:47
いえいえ、それはあなたの勘違いです。 DataSet 内のオブジェクトと、DBMS 内のオブジェクトを、混ぜて考えているからそう思われるだけです。 この二つを同じと考えてはいけません。あるいは、DataSet を DBMS のローカル コピーと扱いましょう。そして、DataSet に VIEW はなく、TABLE が存在しているだけです。 そうすると、DataView が、DBMS における TABLE に対する VIEW のように、DataTable の見方を表すものであることがわかるでしょう。
何と比較しているのかわかりませんが、VS.NET 2002 の頃から可能でしたけど? というか、「ひとつのテーブルしか更新できない」ことに、不満があるのですけど。。。 (「データ-マスタ」で、マスタが複数あってもデータがひとつなら、更新できる。データ テーブルが複数のテーブルで構成されていたら、DataAdapter では更新できない。) |