AccessとLinux

中小企業での販売管理プログラムの作成についての所感

クライアントとしてのAccess(4) OpenRecordsetについて

2008年05月18日 00時28分10秒 | Weblog
ODBC経由でPostgreSQLを参照、更新していて一番不便に思うのはOpenRecordsetの引数にクエリー名が使用できないということです。SQLを自在に使用できる人なら特に問題ないのでしょうが、SQLがあまり得意でないなら、OpenRecordsetの引数にSQL文を指定しなければならないのはかなり負担です。

複雑なクエリーが必要な場合、クエリデザインを利用してクエリーのクエリーを作ってみたり、クエリー同士をjoinしたりすることは多いです。そうして作成したクエリーをOpenRecordsetの引数として使用できないとなるとやはり不便です。この点がmdb内でプログラムを作成する場合と、別途データベースサーバーを使用する場合の大きな違いです。

この対策としていくつかあります。

1.クエリデザインでクエリーを作成し、SQL表示させてそのクエリーを元に必要なクエリーを作る。
この方法はかなり有効です。クエリーのクエリーというわけには行きませんが、少なくともテーブルをjoinして条件付けした上でselectする場合や複雑な集計クエリーの場合などには有効です。

2.クエリーのクエリーや、クエリー同士をjoinしなければならない場合には、要素となっているクエリーをPostgreSQL側のviewとして定義してしまう。そのviewをテーブルとしてリンクしてクエリーを作成、1同様にSQL文を作成する。
この方法だと、リンクしたviewはAccess側では更新不可能なテーブルとして認識されます。もし、更新が必要ならPostgreSQL側でルールを作成してやります。リンクしたテーブルはAccess側では単なるテーブルなので、そのテーブルを元にしたクエリーなら1と同様にSQL文としてOpenRecordsetの引数として使用できます。

3.クエリーのクエリーや、クエリー同士をjoinしたクエリー名をフォームのレコードソースとしてオープンし、レコードセットとしてsetする。
OpenRecordsetの引数としてはODBCリンクしたテーブルを元にしたクエリー名は指定できませんが、フォームのレコードソースにはなれます。
この方法だとどんなクエリーでもレコードセットとすることができます。通常、レコードセットとして利用するためのフォームなので、表示する必要はないと思います。Hiddenとして開きます。
一端フォームとして開いてしまえば、
set rst = Form_test.Recordset
としてレコードセットとしてsetできます。
難があるとすると、フォームのオープンに時間がかかってしまうということと、デバック時にフォームが開いているので、忘れずに閉じなければならないということです。

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« クライアントとしてのAccess... | トップ | クライアントとしてのAccess... »

コメントを投稿

Weblog」カテゴリの最新記事