- PR -

別DBにある複数のテーブルを元にDataGridに表示する方法

投稿者投稿内容
nori
ベテラン
会議室デビュー日: 2004/09/02
投稿数: 56
投稿日時: 2004-10-13 11:37
いつもお世話になっております。

DataGridを作成しております。

SHAINテーブル
SHOZOKUテーブル

SHAIN.SHOZOKU_CD = SHOZOKU.SHOZOKU_CD

DataGridに表示したいのは次の項目です。

SHAINテーブル :社員番号、社員氏名
SHOZOKUテーブル:所属コード、所属名称

悩んでいるのは、SHAINテーブルとSHOZOKUテーブルが
別のデータベースに存在しているため、Connectionが
異なります。

今までは同一DB上のテーブルを見ていたので
ConnectionStringにセットするのは1つでした。

このような場合、どのようにConnectionを設定すれば
よいのでしょうか?

別の方法でも構いません。
例えば、SHAINテーブルを1件ずつ見て、そのSHOZOKU_CDに
該当するデータをSOZOKUテーブルから抽出し、その結果を
DataGridに表示する方法とか、、、、。

この方法についても検討してみたのですが、わかりませんでした。

環境はOracle9i、VB.NETで、経験は2ヶ月です。
アドバイス、宜しくお願い致します。
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-10-13 11:47
こんにちは

引用:


今までは同一DB上のテーブルを見ていたので
ConnectionStringにセットするのは1つでした。




もう1つConnectionを作成して別々に接続すればいいのではないでしょうか?
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2004-10-13 11:57
別々のコネクションで取得して、メモリ内で加工すれば可能とは思いますが、
普通、DBリンクとかでOracle側でなんとかならないもんですかね?
nori
ベテラン
会議室デビュー日: 2004/09/02
投稿数: 56
投稿日時: 2004-10-13 12:09
早速のアドバイスありがとうございます♪

もう一つConnectionを作成することも考えたのですが、
どのようにJOINすれば良いのかわかりませんでした。


sql = "SELECT SHAIN.SHAIN_NO, SHAIN.SHAIN_NAME FROM SHAIN"

conn = New OleDb.OleDbConnection
conn.ConnectionString = "Provider=・・・・・・・;"
adp = New OleDb.OleDbDataAdapter
cmd = New OleDb.OleDbCommand
cmd.Connection = conn
cmd.CommandText = sql
adp.SelectCommand = cmd
conn.Open()
ds.Clear()
adp.Fill(ds, "ShainTable")

同一DB上にあればいかのようなSQLにしたいと思っています。
--------------------------------------------------
SELECT SHAIN.SHAIN_NO, SHAIN.SHAIN_NAME,
SHOZOKU.SHOZOKU_CD, SHOZOKU.SHOZOKU_NAME
FROM SHAIN, SHOZOKU
WHERE SHAIN.SHOZOKU_CD = SHOZOKU.SHOZOKU_CD
ORDER BY SHAIN.SOZOKU_CD, SHAIN.SHAIN_NO
--------------------------------------------------

基本的なことだと思いますが、どうか宜しくお願い致します。
Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2004-10-13 12:59
別々にFillで取り込んで,リレーションを定義してやればDataGridに表示されると思います。ただし,望んでる表示方法とは異なると思いますが・・・。
上の方法でだめなら自前で連結した形のDataSetを作るか,IBindingListなどを自分で実装して連結したように見せるものを作らないといけません。
(DB側の設定でどうにかなるならそっちのほうがはるかに楽だと思います)
えムナウ
大ベテラン
会議室デビュー日: 2004/06/10
投稿数: 187
お住まい・勤務地: 東京
投稿日時: 2004-10-13 13:26
DataSetを2つ作ってマージすればいいだけです。

DataSet の内容のマージ
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconmergingdatasetcontents.asp

マージ先のデータセットを最終形にしとくのを忘れないようにしてください。
具体的には以下の項目を持ったDataSetスキーマ xxxx.xsd を用意すると簡単です。
SHAIN_NO
SHAIN_NAME
SHOZOKU_CD
SHOZOKU_NAME

_________________
えムナウ Microsoft MVP for Visual Developer - C#,2005/01-2007/12
えムナウのプログラミングのページ Blog1 Blog2
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-10-13 14:05
引用:


--------------------------------------------------
SELECT SHAIN.SHAIN_NO, SHAIN.SHAIN_NAME,
SHOZOKU.SHOZOKU_CD, SHOZOKU.SHOZOKU_NAME
FROM SHAIN, SHOZOKU
WHERE SHAIN.SHOZOKU_CD = SHOZOKU.SHOZOKU_CD
ORDER BY SHAIN.SOZOKU_CD, SHAIN.SHAIN_NO
--------------------------------------------------




こんにちは。
自分の投稿と矛盾する部分もあるかとは思いますが、別々の接続を使用するのであればそれぞれのテーブルを呼出して別々のDataSetに格納するという方法がいいでしょうし、1つの接続で済ますのであればデータベースリンク等でデータベース側の工夫が必要でしょうね。

その場合は FROM テーブル名@(データベースリンク名)でいけるかと思います。
えムナウ
大ベテラン
会議室デビュー日: 2004/06/10
投稿数: 187
お住まい・勤務地: 東京
投稿日時: 2004-10-13 14:58
データベースリンクは使えるかもしれませんね。
検索で拾ってきたので以下の例はかなりいい加減だと思います。
ヘルプとかで調べて使ってください。

create database link dblink
connect to xxxx
identified by PASSWORD
using 'oracle_server'
;

select * from xxxx.tablename@dblink;

_________________
えムナウ Microsoft MVP for Visual Developer - C#,2005/01-2007/12
えムナウのプログラミングのページ Blog1 Blog2

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