- PR -

DataViewの子テーブルの条件によるデータ抽出

1
投稿者投稿内容
Bell
会議室デビュー日: 2004/03/09
投稿数: 13
投稿日時: 2004-03-09 15:34
初めて投稿します。

一対多リレーションのテーブルのDataSetからDataViewを作成し、
DataView.RowFilterを使い条件によって行を抽出、
DataGridにフィルタされたDataViewの表示をしているのですが、
子テーブルの特定の行を抜き出すフィルタ条件の設定に行き詰まっています。

例えば、

親テーブルP:A,B,C,D A:主キー
子テーブルC:a,b,c,d 主キー無し
この2つのテーブルがA=aの一対多のリレーションを持っている

このときにPのDataView dvPにC=1かつd=1のデータを抽出したいのです。

フィルタ後のdvPは、

A(1),B(X),C(1),D(X)
--a(1),b(x),c(x),d(1)
--a(1),b(y),c(y),d(1)
A(2),b(Y),C(1),D(Y)
--a(2),b(z),c(z),d(1)
...
になると思うのですが、
dvP.RowFilter = "C=1 AND Child.d = 1"
という条件でコンパイルすると、
「位置xのトークン'Child'を変換できません」
と注意されてしまいうまくいきません。

DBもC#も使い始めたのが今月からのため、
わかりづらい書き方になってしまっているかもしれませんが
よろしくご教授おねがいします

[ メッセージ編集済み 編集者: Bell 編集日時 2004-03-09 15:36 ]
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2004-03-09 15:38
NAL-6295です。

過去ログが参考になるかもしれません。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?forum=7&topic=9453

Bell
会議室デビュー日: 2004/03/09
投稿数: 13
投稿日時: 2004-03-10 08:55
DataViewManagerを使用して各テーブルにRowFilterをかけることで
目的のフィルタ結果を出すことができました
ありがとうございました。
LockedRoom
会議室デビュー日: 2004/05/25
投稿数: 3
投稿日時: 2004-05-25 16:47
はじめて投稿します。
どうしてもわからないのでこのスレッドを再利用させてください。
やりたいことは、Bellさんとほとんど同じです。
親テーブルと子テーブルをそれぞれDataGridに接続し、子テーブルの値でフィルターします。
フィルター自体はDataViewManagerでできるようになったのですが、親テーブルのDataGridにフィルター条件が当てはまらなかった親レコードを表示しないといったことはできるのでしょうか?
過去ログ等も参照したのですが、どうしても理解できなかったので、迷った挙句こちらで質問することにしました。
よろしくご教授おねがいします。



Bell
会議室デビュー日: 2004/03/09
投稿数: 13
投稿日時: 2004-05-25 17:03
親テーブルのフィルタ条件に
子テーブルのフィルタの結果、自分にぶら下がる子テーブルの個数が1以上
という設定をしてみたらどうでしょうか?
Count関数で子テーブルの個数を数えることができると思います。
LockedRoom
会議室デビュー日: 2004/05/25
投稿数: 3
投稿日時: 2004-05-26 09:34
ありがとうございます!
Count関数で子レコードが1件以上あるレコードだけをフィルタすることができました。
一日でレスが来るとは思っていなかったのでとても助かりました。
LockedRoom
会議室デビュー日: 2004/05/25
投稿数: 3
投稿日時: 2004-05-26 11:26
すみません、やっぱり解決できませんでした。
Count関数を使うことにより子レコードの数を集計することはできましたが、子テーブルにRowFilterを使用した後にCount関数を使っても参照するテーブルがフィルタの適用前のテーブルのようで、結局のところ求めるフィルタ結果をえることができませんでした。
よい方法はないでしょうか?
1

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