- PR -

DataSetのリレーションにつきまして。

1
投稿者投稿内容
DCPRG
会議室デビュー日: 2004/09/06
投稿数: 15
投稿日時: 2005-03-15 21:14
いつもお世話になっております。

2つのDataSetにリレーションを結ぶ方法は色々な所で
紹介されておりますが、親DataSetにあって子DataSetに
無いデータ(或いはその逆)が存在する場合、エラーとなって
しまいます。
このエラーを回避し、片方にあって片方に無い場合、Nullで
リレーションを結ぶ方法はあるのでしょうか?

どなたかご存知の方がいらっしゃいましたら、ご教示お願い
致します。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-03-17 22:17
引用:

DCPRGさんの書き込み (2005-03-15 21:14) より:

2つのDataSetにリレーションを結ぶ方法は色々な所で
紹介されておりますが、


え〜〜〜!!どこに?どこに?DataTableの間違い?


NilableをTrueにしてもだめですか?


 あれれ?親にあって子にない、は、エラーにならないでしょ?

[ メッセージ編集済み 編集者: Jitta 編集日時 2005-03-17 22:17 ]
はぎ丸
常連さん
会議室デビュー日: 2005/02/02
投稿数: 36
投稿日時: 2005-03-18 15:32
こんにちは。
引用:

 あれれ?親にあって子にない、は、エラーにならないでしょ?


その通りだと思います。
逆に親がなく、子がいるっていうのはどうやってもエラーになると思います。
DataTableに対してデータをロードするだけだったら
DataTableのBeginLoadDataメソッドを呼んであげればいいのですが、
所詮はリレーションを結んだことにはならないですね。

それからDataSetの中身の元データは何でしょうか?
もしDBから読んでいるのであればしっかりとDBの制約で
同様のリレーションをきるべきではないでしょうか・・・
kanai
ベテラン
会議室デビュー日: 2004/09/13
投稿数: 98
投稿日時: 2005-03-18 16:18
そもそも、リレーション(参照整合性制約)は、「親が存在しない子」のようなデータを
エラーにして登録されないようにするためのものですよね。

「親が存在しない子」を許容するのであれば、参照整合性制約を設定する意味がないと
思います。
DCPRG
会議室デビュー日: 2004/09/06
投稿数: 15
投稿日時: 2005-03-19 00:26
皆様、ご回答誠に有り難うございます。

結果としまして、下記内容で何とか対処出来たかと思われます。

da = New OracleDataAdapter
ds = New DataSet

da.SelectCommand = cm1
da.Fill(ds, "BUMON")
cm1.Dispose()

da.SelectCommand = cm2
da.Fill(ds, "SYAIN")
cm2.Dispose()

Dim ParentCols As DataColumn
Dim ChildCols As DataColumn
Dim relKANKEI As DataRelation

ParentCols = ds.Tables("BUMON").Columns("BUMONCD")
ChildCols = ds.Tables("SYAIN").Columns("BUMONCD")

Dim blnCon As Boolean = False
relKANKEI = New DataRelation("BUMONSYAIN", ParentCols, ChildCols, blnCon)

ds.Relations.Add(relKANKEI)
DataGrid1.DataSource = ds.Tables(0)
DataGrid1.DataBind()


…おっしゃる通り、‘親にあって子に無い’状態自体が
おかしいのですが、実際の運用上、人が一人も居ない部門が
組織上あったり(?なんだそりゃ)、歪んでおります。

あと、VB.NETで、Nilableというキーワードが探しきれなかったのですが、
これはどういうものなのでしょうか?
よろしくお願い申し上げます。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2005-03-19 02:07
引用:
あと、VB.NETで、Nilableというキーワードが探しきれなかったのですが、
これはどういうものなのでしょうか?

「nullable」でしょうかね。

で、「何とか対処出来た」んならいいのでしょうけど、
そもそもそのDataSet上でリレーションを張らなければいいだけな気がします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-03-19 07:46
引用:

べるさんの書き込み (2005-03-19 02:07) より:
引用:
あと、VB.NETで、Nilableというキーワードが探しきれなかったのですが、
これはどういうものなのでしょうか?

「nullable」でしょうかね。


ん〜?DataSetデザイナでは、Nilableとでていたような?


↓↓あ〜、そうかもしれないniLLable

[ メッセージ編集済み 編集者: Jitta 編集日時 2005-03-19 15:38 ]
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2005-03-19 11:02
引用:
ん〜?DataSetデザイナでは、Nilableとでていたような?

ありゃ。。失礼しました・・環境がなかったので・・

googleでも殆ど引っかからないしMSDNでも引っかからないので[nullable]か[nillable]
かな〜と思いました。

「nillable」はXML用語なのかな〜と思ってたらデータベースでも使用するのですね。

[ メッセージ編集済み 編集者: べる 編集日時 2005-03-19 20:13 ]
1

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