Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー

同一形式のアクセスMDBを一度に参照したいのですが?

DB初心者です。アクセスデータベースで同一形式のMDBを年度毎に作成しようと考えています。この複数のデータベースからデータを参照する場合、どの様な方法があるのでしょうか。MDBの数だけコネクトを行う必要があるのでしょうか?よろしくお願いします。

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

  • ベストアンサー
  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.4

>「参照アプリ(SQL文)を全て変更しなくてはいけない」と考えるのですが、この解釈で問題ないでしょうか? インターフェースが何を使用するか不明ですが・・ SQLでレコードセットを取得する際に既存のSQLがあればUNIONクエリでテーブルを参照するように既存のSQLにサブクエリとしてネストしたりする必要が出ます。 参照先を単一のテーブルではなくUNIONクエリに変更すれば良いだけです。 インターフェースを同じAccessで作るなら作業的には楽です。 >容量超過を動的確認して条件を絞り込むことは出来るのでしょうか? 動的に確認するのはどうでしょうか。出来ないと思うのですが。容量超過の際に返されるエラーをトラップして処理の中止処理などするのを動的と捉えれば動的確認は出来ますが。 レコードセットを取得する際にWHERE文で絞込み余分なレコードは取得しなければ良いだけではないでしょうか。 クエリレコードセットのサイズは1GBまではあくまでもAccess内での制約のことなのでAccessではなく他を使うのであれば問題ないと思いますが。

yarazu
質問者

お礼

質問が曖昧で かつ 補足が遅れたにもかかわらず、何度も回答を頂きありがとうございました。イメージ的にはかなり理解できました。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.3

>設計したMDBが容量オーバーとなった場合の簡単な対処方法 例えばmdb1のTable1が容量オーバーになったら別のmdb2を用意しTable1を移動し元のmdb1へTable2としてリンクさせてTable1を空にして追加入力できるようにする。 >SQL文で複数テーブルを意識した記述が必要になるのではと考えています 参照する際はリンクされたTable2とTable1をUnionクエリを使ってTable1とTable2を同一テーブルのようにして使用する。 しかしクエリレコードセットのサイズは1GBまで(Access内では)なので参照時にWHERE文で条件抽出しレコードセットの容量を少なくする必要があります。 もっと大きくなるような場合はSQLServerとか使用する方が良いのではないでしょうか。

yarazu
質問者

補足

お礼が遅くなり申し訳ありません。何度もありがとうございます。もう少し確認させて下さい。 (1)参照する際はリンクされたTable2とTable1をUnionクエリを使って・・・  この場合、「参照アプリ(SQL文)を全て変更しなくてはいけない」と考えるのですが、この解釈で問題ないでしょうか? (2)クエリレコードセットのサイズは1GBまで(Access内では)なので参照時にWHERE文で条件抽出しレコードセットの容量を少なくする必要があります。・・・  この時、容量超過を動的確認して、条件を絞り込むことは出来るのでしょうか? 何度も申し訳ありませんが、よろしくお願い致します。  

すると、全ての回答が全文表示されます。
  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.2

Accessは2GBからデータベースのシステムオブジェクトに必要な領域のサイズを引いた値が最大サイズになります。 テーブルも同様に2GBからシステムオブジェクトに必要な領域のサイズを引いた値が最大テーブルサイズになります。 という事でテーブル1つで2GB近くなればそれ上は扱えなくなります。 年間でレコード数がどのくらいの容量になるかにもよりますがバックエンド側としてテーブルのみのmdbとフロント側としてインターフェース用にフォーム等のみのmdbで処理すればサイズに余裕がある状態で使えると思いますが。 フロントエンドのmdbにバックエンドのmdbからテーブルをリンクして使えば良いと思います。 それ以外ではADOを使って他のmdbからレコードセットとして参照等行えます。

yarazu
質問者

補足

回答ありがとうございます。Accessはデータテーブルのみと考えています。と言うよりインターフェース部分を勉強していません。質問の内容が不明確で申し訳ありません。#1の補足に記述した内容で再度アドバイスを頂ければ幸いです。

すると、全ての回答が全文表示されます。
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

MDBファイルが大きくなければ、分けなくとも良いように思えますけど? (ファイル全体で2GB、テーブルでは1GB だったかな?) 各年度単位での吸出しは簡単に出来ますし、ファイルを分けていると、かえって面倒では? (単純にリンクテーブルでも) 閑話休題 こちらが勉強になると思います 外部 Jet データベースとの接続方法 http://x7net.com/~access/AcTipsGnrlHowToAttachExternalMdb.html

yarazu
質問者

補足

回答ありがとうございます。参考頁を拝見しましたが解決には至らないようです。最初の質問が不明確で追加質問になってしまうかもしれませんが、次の表現で理解頂けたらと補足いたします。 >(単純にリンクテーブルでも) リンクは、それぞれ異なるMDBに格納されているテーブルを一つのMDB上のテーブルに見立てて参照することと理解しています。複数MDBからテーブルを参照する場合、同じ形式のテーブルでも当然異なるテーブル名でリンクさせる必要があり、実際の参照時は、コネクトは1回としてもSQL文で複数テーブルを意識した記述が必要になるのではと考えています。←ここが勉強不足?。 この場合、当初1本のMDBで設計していて容量オーバーとなった場合、管理者は、単純に過去数年分を別MDBへ分割して保存するのでしょうが、参照アプリ(SQL文)の変更が膨大になりそうで、それならば最初から年度別にMDBを管理することを意識した設計とするのが良いのではと考え最初の質問となりました。 「当初1本のMDBで設計したMDBが容量オーバーとなった場合の簡単な対処方法を教えてください。」

すると、全ての回答が全文表示されます。

関連するQ&A