@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

Relations(リレーション)について

1
投稿者投稿内容
灼熱
会議室デビュー日: 2004/03/04
投稿数: 13
お住まい・勤務地: 山口
投稿日時: 2004-07-12 10:33
リレーションについて分からないことがありましたので、
どなたかよろしくお願いします。
下記のテーブルが3つあるとします。

法人マスタ
HOUJIN_CD varchar2(2) NOT NULL, --法人CD(キー)
HOUJIN_NA varchar2(50) NULL, --法人名

社員マスタ
HOUJIN_CD varchar2(2) NOT NULL, --法人CD(キー)
SYAIN_CD varchar2(5) NOT NULL, --社員CD(キー)
TENPO_CD varchar2(2) NULL, --店舗CD
SYAIN_NA varchar2(50) NULL, --社員名

店舗マスタ
HOUJIN_CD varchar2(2) NOT NULL, --法人CD(キー)
TENPO_CD varchar2(2) NOT NULL, --店舗CD(キー)
TENPO_NA varchar2(50) NULL, --店舗名


法人マスタと社員マスタのリレーションは、

mydts.Relations.Add("myRelations1", mydts.Tables("法人マスタ").Columns("HOUJIN_CD"), _
mydts.Tables("社員マスタ").Columns("HOUJIN_CD"))

で実現できますが、3つのテーブルのリレーションは、どのようにすれば実現できるのでしょうか?

mydts.Relations.Add("myRelations1", mydts.Tables("法人マスタ").Columns("HOUJIN_CD"), _
mydts.Tables("社員マスタ").Columns("HOUJIN_CD"))
mydts.Relations.Add("myRelations2", mydts.Tables("社員マスタ").Columns("HOUJIN_CD","TENPO_CD"), _
mydts.Tables("店舗マスタ").Columns("HOUJIN_CD","TENPO_CD"))

のようなことがしたいのですが・・・。もちらん上記のでは、エラーになります。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-07-12 11:20
引用:

灼熱さんの書き込み (2004-07-12 10:33) より:


 どのテーブルとどのテーブルを、どのカラムで関係づけたいのでしょう?それを整理してコーディングすればよいのでは?

 というか、エラーがでたなら、エラーメッセージを一字一句書き写してください(エラースッタックは除く)。でないと、何が間違っているのかわかりません。(それとも「試せ」と言っているのでしょうか?)
Ten.
ベテラン
会議室デビュー日: 2003/04/03
投稿数: 67
投稿日時: 2004-07-12 11:25
こんにちは

引用:

mydts.Relations.Add("myRelations2", mydts.Tables("社員マスタ").Columns("HOUJIN_CD","TENPO_CD"), _
mydts.Tables("店舗マスタ").Columns("HOUJIN_CD","TENPO_CD"))


DataSetのリレーションは使ったことはありませんが、このメソッドのヘルプを見るとDataColumnを配列として指定すればよいのではないでしょうか。
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2004-07-12 11:45
引用:

Ten.さんの書き込み (2004-07-12 11:25) より:
こんにちは

引用:

mydts.Relations.Add("myRelations2", mydts.Tables("社員マスタ").Columns("HOUJIN_CD","TENPO_CD"), _
mydts.Tables("店舗マスタ").Columns("HOUJIN_CD","TENPO_CD"))


DataSetのリレーションは使ったことはありませんが、このメソッドのヘルプを見るとDataColumnを配列として指定すればよいのではないでしょうか。



NAL-6295です。

コード:
        Dim ParentKeys() As DataColumn
        Dim ChildKeys() As DataColumn

        For Each name As String In RelationColumnNames
            If ParentKeys Is Nothing Then
                ReDim ParentKeys(0)
                ReDim ChildKeys(0)
            Else
                ReDim Preserve ParentKeys(ParentKeys.GetUpperBound(0) + 1)
                ReDim Preserve ChildKeys(ChildKeys.GetUpperBound(0) + 1)
            End If
            ParentKeys(ParentKeys.GetUpperBound(0)) = ParentTable.Columns(name)
            ChildKeys(ParentKeys.GetUpperBound(0)) = ChildTable.Columns(name)
        Next

        Dim RelationName As New System.Text.StringBuilder

        With RelationName
            .Append(ParentTableName)
            .Append("_")
            .Append(ChildTableName)
            .Append("_Relation")
        End With

        Dim objRelation As New Data.DataRelation(RelationName.ToString(), ParentKeys, ChildKeys)




過去に書いたプログラムで可変にリレーションを張る部分のコードですが、参考になると思います。
灼熱
会議室デビュー日: 2004/03/04
投稿数: 13
お住まい・勤務地: 山口
投稿日時: 2004-07-23 11:56
返事が遅くなりまして、すいません。
3人の方に教えて頂いたのをよく考えて、
下記のようにしましたら、できました。
ありがとうございました。
これからもよろしくお願いします。

Dim ParentKeys(1) As DataColumn
Dim ChildKeys(1) As DataColumn
ParentKeys(0) = New DataColumn
ParentKeys(1) = New DataColumn
ChildKeys(0) = New DataColumn
ChildKeys(1) = New DataColumn

ParentKeys(0) = mydts.Tables("TENPO_MASTER").Columns("HOUJIN_CD")
ParentKeys(1) = mydts.Tables("TENPO_MASTER").Columns("TENPO_CD")
ChildKeys(0) = mydts.Tables("SYAIN_MASTER").Columns("HOUJIN_CD")
ChildKeys(1) = mydts.Tables("SYAIN_MASTER").Columns("TENPO_CD")

mydts.Relations.Add("rltRelations", ParentKeys, ChildKeys)
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2004-07-23 12:32
NAL-6295です。

引用:

灼熱さんの書き込み (2004-07-23 11:56) より:
ParentKeys(0) = New DataColumn
ParentKeys(1) = New DataColumn
ChildKeys(0) = New DataColumn
ChildKeys(1) = New DataColumn



この部分を削除してもうまく動くと思いますよ。
灼熱
会議室デビュー日: 2004/03/04
投稿数: 13
お住まい・勤務地: 山口
投稿日時: 2004-07-23 13:08
「NAL-6295」様、返信ありがとうございます。
「なるほど・・・。」
細かな点を指摘して頂きありがとうございます。
まだ、.NET(VB)を使用して一ヶ月、正確には、1週間程度しか
触ったことがないので、全然分かっていません。
また、何かあったら、よろしくお願いします。
1

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