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できます。
難があるとすると、フォームのオープンに時間がかかってしまうということと、デバック時にフォームが開いているので、忘れずに閉じなければならないということです。
複雑なクエリーが必要な場合、クエリデザインを利用してクエリーのクエリーを作ってみたり、クエリー同士を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できます。
難があるとすると、フォームのオープンに時間がかかってしまうということと、デバック時にフォームが開いているので、忘れずに閉じなければならないということです。
※コメント投稿者のブログIDはブログ作成者のみに通知されます