• ベストアンサー

ODBCデータソースへの接続方法

はじめまして。よろしくお願いします。 ODBCを利用して、データベースをアクセスしようと思っています。 書籍等を覗いてみると、OpenDatabaseメソッドを使用して、 OpenRecordsetメソッドでレコードセットを作成する。 とかいてあります。 今回、僕が扱うデータベースは2つ(ODBC接続文字列のDATABASE が2個指定するケース)ありまして、その場合の指定方法が分からず 悩んでいます。もちろん、2つのデータベースをSQLでレコードを作成 します。 どのような指定が必要なのでしょうか? 初心者の質問、また言葉足らずの面もあって申し訳ございませんが、 お気づきの方が居られましたらご教授ください。

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

  • ベストアンサー
  • kagep
  • ベストアンサー率23% (171/721)
回答No.5

なるほど、売上データの一覧を出したいんだけど、 その明細の担当者や商品名などのマスタ(定数)データは他のDBですよ、というわけですね。 いくつか方法はありますが・・・ いちばん簡単なのは、たとえば 「担当者名抽出関数」や「商品名抽出関数」などを作成して、 引数にコードを指定すれば、名称を戻り値として返す構造にしておきます。 で、売上明細を1レコードづつ描画していく際に、 その関数の戻り値を設定していくやり方。 このやり方がいちばん簡単ですが、同時使用ユーザー数が多かったり、 ネットワークがヘボで遅かったりすると、レスポンスに難ありです。 各名称の抽出関数ではかならずレコードセットオブジェクトを開放してください。 もうひとつは・・・ Accessのmdbを1つワークテーブルとして作成しておき、 売上明細のテーブルと各名称のマスタテーブルをリンクさせておくこと。 こうすれば、そのAccessMDBに貼られたリンクテーブルは同一DB上として 扱うことが出来ます。 このやり方の問題点は、MDBのリンクを使用しているので、環境に依存する、 ということです。フォルダ構造などが変わると、 リンクも再度貼りなおしになるため、メンテナンスに気を使います。 私なら・・・クラ/サバ構造であることを前提にすれば、前者かな。 外していたらごめんなさい。

eightman00
質問者

お礼

回答有難うございました。 内容がわかり易く、大変参考になりました。

その他の回答 (4)

  • zerosix
  • ベストアンサー率31% (47/149)
回答No.4

経験者に格上げ。 何だかコーディングするよりも、設計の問題って気がして、 あなたがちょっと気の毒。 2つDBがあって、その都度両方を参照して画面に出力するというのは できますけど、 パフォーマンスを考えたら、ひとつのDBに格納すべきです。 それで、2つのテーブルを結合するSQLを一個書けば画面に出力したい レコードを取得することができるかと思います。(***1) 本題。DBが分かれているなら、2回SQLを発行するしかないですよ。 マスターDBを検索して、出力させる 部店コード、部店名、[個人コード1]、個人名、商品コード、商品名 のデータを表示させる。 次に[個人コード1]に対応するデータを条件(Where句)で指定して、 それに対応する 部店コード、個人コード、商品コード、日別の売上高、売上数量 を売上明細DBより取得する。 DBが二つあるのはメインをサブという位置付けだと思いますが(うそかも)、 メインの情報をサブにバッチ等でコピーするということができれば、 (***1)のように出来ます。

eightman00
質問者

お礼

何度も回答頂き、有難うございました。 具体的な例も挙げて頂き、助かりました。 これで集中して取り組めそうです・。

  • kagep
  • ベストアンサー率23% (171/721)
回答No.3

ひょっとして「同じDBにある2つのテーブルに接続したい」ということですか? でも接続文字列が2つあるんですよねぇ・・・? まったく違うDBにあるテーブルのデータを結合するには、 SQL一発で行うのは不可能だと思いますが・・・ MDBをつかって、MDBにその2つのDBのテーブルをリンクしておけば、 そのMDBを開けば、可能ですが。 ただ、結合した結果を格納するのはどこになるんでしょうか? ただ処理に必要なだけであれば問題にはなりませんが・・・。 DBの状況や、具体的に何をしたいのか(仕様面で)を 可能な限り教えていただければもう少し細かいアドバイスが出来るんですが・・・

  • zerosix
  • ベストアンサー率31% (47/149)
回答No.2

>2つのレコードを結合する方法が分かりません。 >結合して1つのレコードを作成するには、どのようにすれば良いのでしょう? >よろしくお願いします。 ..すいません、さっぱり書いている内容がわかりません。 結合するといえば「2つのテーブルを結合する」なんて言い方が あります。 私の回答は「DBオブジェクトを結合することは出来ない」と言う意味で 書いたのであって、レコードを結合するという意味で書いたのではありません。 あなたの書いているソースコードを見せてください。 それでどこが分からないのか書いてもらえれば ほかの方もアドバイスできると思います。

eightman00
質問者

補足

回答有難うございます。 おっしゃっている意味は理解していましたが、 私の文章だと分かりづらかったですねm(__)m ちょっと質問内容をやりたいことに変えてみます。 環境的にはDBが2つあります。 1つはマスターDBとでもいいましょうか。部店コード、部店名、個人コード、 個人名、商品コード、商品名等がいくつかのテーブルに分けて収録してあります。 もう1つは売上明細DBとでもいいますか。そのなかには、部店コード、 個人コード、商品コード、日別の売上高、売上数量等がいくつかのテーブルに 分けて収録してあります。 仕様としては、売上高別にそれぞれの名称を付加して、画面に表示させたいのです。 以上がやりたいことになります。 (上記の説明はあくまで例としてあげていますが本来の仕様も大きくかけ離れて はいません。) 上記の項目が一つのDBで収録してあれば、分かるのですが、DBが2つの場合、 良い方法が思いつきません。効率の良い方法があれば教えて下さい。

  • zerosix
  • ベストアンサー率31% (47/149)
回答No.1

2つのDBをひとつのオブジェクトで指定するってできるんですかね? できないんではないですか? 私ならDBごとにオブジェクトを作成して、それぞれのオブジェクトに 対して、レコードを作成しますけど、それではだめなのかな?

eightman00
質問者

補足

回答有難うございます。やはり、出来ないのですかね。 申し訳ないのですが、もう少しお付き合いください。 zerosixさんの案も考えましたが、2つのレコードを結合する方法が 分かりません。 結合して1つのレコードを作成するには、どのようにすれば良いのでしょう? よろしくお願いします。