• ベストアンサー

異なるDBのSQL

SQLを始めたばかりの初心者です。 oo4oやADOを使用して、オラクルサーバーのデータをSELECT文で オラクル内の複数のテーブルを結合してListViewで表示する プログラムを作成中です。 オラクルサーバーにメインデーターがあり 各クライアントにMDB形式でマスタデータがあります。 MDBのマスタデータにはたとえばですが、テーブル名 [商品テーブル] フィールド名[コードナンバー]、[商品名]... となっており、サーバーには、テーブル名[商品コード]  フィールド名[コードナンバー]、[受注日]....があるとします。 クライアントからoo4oやADOを使用して、サーバーのデータを SELECT文でオラクル内の複数のテーブルを結合して ListViewで表示するのはできます。しかし [コードナンバー]は取得できるのですが、サーバーのテーブルには、 [商品名]がないためとうぜん表示できません。 この場合、オラクルから取得したデータをマスタデータのあるMDBに新しくテーブルを 作りそこに一度格納して再度ADOで結合処理して 商品名を表示する方法しか考えつかないのですが、 ほかに良い方法はありますでしょうか? ADOで接続MDBに保存再度ADOで接続して表示では レスポンスが悪いかなと思いまして... *VB6 winXP-pro オラクル9i

質問者が選んだベストアンサー

  • ベストアンサー
noname#60992
noname#60992
回答No.2

サーバにもマスタのテーブルがあってそれをMDBにおとしてクライアント起動時に配布している可能性が高いと思います。 マスタデータを各クライアントのMDBしかもっていないとは考えにくいです。(整合性を確保できません) まず、サーバのテーブルレイアウトをご確認ください。  どうしても、サーバにそのようなテーブルがないのであれば、それを作ることが可能であれば作ってマスタを一元管理するべきであると思います。 サーバのデータベースを改変することができないのなら、クライアントで処理するしかないと思います。 オラクルのテーブルをリンクテーブルとしておけば一回のSQLで処理できます。  

INVERRARY
質問者

お礼

16August様、ご回答ありがとうございます。 ご指摘の通りマスターデータをメインサーバーに置かず各クライアントにMDBとして持つ方法は整合性がとれず私もおかしいと思います。ただこのシステムを導入したメーカーの仕様でありシステムの基盤となる変更は不可なのです。 マスタはパソコンの起動時や更新プログラムによってマスタを管理している端末からダウンロードされます。 >オラクルのテーブルをリンクテーブルとしておけば一回のSQLで処理できます。 なるほどいい方法だと思います。 試してみます。ありがとうございました。

その他の回答 (1)

noname#258293
noname#258293
回答No.1

サーバにあるメインデータに商品名を持たせましょう。 サーバとクライアントの両方にデータがあるという例が提示されています。この場合「サーバにあるデータが『主データ』」で「クライアントにはその複製がある」と考えるのが自然です。 クライアント側にのみ名称があるということは、1つのコードに対して各クライアントで異なった名称を付けられるということです。 たとえば、在庫表を作るときに、操作するクライアントごとに商品名が異なっていたら、困ってしまいます。 全員が共有する・共用するデータは1カ所で管理しましょう。

INVERRARY
質問者

お礼

moose11様 ご回答ありがとうございます。 ご指摘の通りマスタの管理の仕方が間違っていると思います。 しかしこのシステムを導入したメーカーの仕様であり、システムの変更は不可なのです。

関連するQ&A