- - PR -
別DBにある複数のテーブルを元にDataGridに表示する方法
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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-10-13 11:47
こんにちは
もう1つConnectionを作成して別々に接続すればいいのではないでしょうか? | ||||
|
投稿日時: 2004-10-13 11:57
別々のコネクションで取得して、メモリ内で加工すれば可能とは思いますが、
普通、DBリンクとかでOracle側でなんとかならないもんですかね? | ||||
|
投稿日時: 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 -------------------------------------------------- 基本的なことだと思いますが、どうか宜しくお願い致します。 | ||||
|
投稿日時: 2004-10-13 12:59
別々にFillで取り込んで,リレーションを定義してやればDataGridに表示されると思います。ただし,望んでる表示方法とは異なると思いますが・・・。
上の方法でだめなら自前で連結した形のDataSetを作るか,IBindingListなどを自分で実装して連結したように見せるものを作らないといけません。 (DB側の設定でどうにかなるならそっちのほうがはるかに楽だと思います) | ||||
|
投稿日時: 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-10-13 14:05
こんにちは。 自分の投稿と矛盾する部分もあるかとは思いますが、別々の接続を使用するのであればそれぞれのテーブルを呼出して別々のDataSetに格納するという方法がいいでしょうし、1つの接続で済ますのであればデータベースリンク等でデータベース側の工夫が必要でしょうね。 その場合は FROM テーブル名@(データベースリンク名)でいけるかと思います。 | ||||
|
投稿日時: 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 |