Q.Access2000 を使うなら、やっぱり ADO ですか? MSDE もあることですし...

 とっとと結論から言ってしまいますと、「Access2000 以降使うなら ADO じゃなきゃダメ」というのは単なる思い込みです。
同様に、「Access2000 以降で SQL Server 使うなら ADO じゃなきゃダメ」というのも思い込みです。

Access2000 から、ADP って形式が使えるようになりましたよね?
これは SQL Server(もしくは MSDE)へ OLEDB プロバイダを使って ADO で接続しますんで、実際の抽出などの動作は基本的にサーバー側で行われます。いわゆるひとつの「クライアントサーバー型」ってやつですか?
だから、ADP には「クエリー」はありませんサーバーで動く「ビュー」もしくは「ストアドプロシージャ」を使うのですね。
MDB はと言えば、パススルーを利用しない限り、クライアント側での処理が多くなります。Jet が ODBC ドライバと協力?してあれこれやってくれるワケですな。だから細かい動作は Jet だけじゃなくて ODBC ドライバに依存することも多いです。

ADP ファイルから SQL Server に接続する場合、OLEDB 経由になります。この場合は ADO を使いましょう。とゆーか DAO なんて使ってはいけません、無駄です。
同じ ADO でも、ADO のヘルプに書いてあるサンプルのとおりに Connection を作成するのではなく、CurrentProject オブジェクトが持つ Connection を利用しましょう。これはいままで MDB で CurrentDB オブジェクトを使っていたのと同じ理由です。

逆に、MDB ファイルから ODBC リンクを使って SQL Server へ接続する場合。これは Jet 、ODBC ドライバを利用します。(パススルークエリーはちょっと事情が違いますけど)この場合は DAO を利用しましょう。わざわざ ADO を利用するメリットはありません。逆に Access が持つセッションとまるっきり別経由の別セッションが使われるためデメリットのほうが多いと思います。


なんでかといいますと。

せっかく Access で開発するんですから、レポート印刷したりフォームでデータ入力したりすると思うのですが、レポートやフォームに連結した場合、ADP では ADO レコードセット、MDB では DAO レコードセットが使われるのです。
つまり、MDB を選んだ場合 DAO(Jet)を使わなくすることはできないし、ADP を選んだ場合 ADO を使わなくすることはできないんです。
ADO 経由で更新したり Jet 経由したりが同じ MDB(もしくは ADP) で混在して行われる状態が良い訳がないと思うのです。キャッシュとかいろいろあるし。
そもそも、せっかく SQL Server を選んだのに、なにが悲しくてわざわざ Jet 使わないといかんの。


ですから、Access2000 以降において、ADO を使うか DAO を使うかといわれたら、考える余地なしでADP で開発するなら ADO、MDB で開発するなら DAO を使うべし!とお答えします。
だってねー。自データベースは Currentdb で参照して、他の MDB は ADO で...なんてことしようとは思わないですよねぇ?それと同じことだと思ってもらえればおわかりいただけるのではないでしょうか。

...あ。でも、VisualBasic から MDB を使う場合はこの限りではありません。ADO (OLE プロバイダは Jet)でも、DAO でも、どちらでもいいです。使い慣れてる DAO でも、新しい分野に挑戦の ADO でも。
上記の判断はあくまでも、Access2000 以降のバージョンを使ってのシステム開発で、自データベースを参照するときの判断基準ですのでおまちがえなきよう。


「ADO は汎用性に優れてうんたら」言われてますが、あんましそーは思えないですね。
便利なプロパティとかメソッドとかあるように見えるし、それは確かに共通なんでしょうけども(この共通性は.NETでならかなり有効らしい)、結局のところ OLE プロバイダによってサポートしてるしてないの差がものすごく激しいから、現状では「汎用性がある」とまで言い切れないと思うのです。ドライバ依存とゆー意味で、ODBC とたいしてかわんないっすよ。さらに資料が少ないと来てるから結局「やってみてどうか」って話になりますよね。もっと各 OLE プロバイダについての詳しい資料があればいいんだけど。...英語ならあるのかも。

ただ、将来性という点では話が違ってきますよね。DAOはもう旧石器時代の遺物で、.NET Framework ではすでにサポートされてません
Office のバージョンがずんどこあがって、VBAも全部.NETになってしまったらばどうなるかわからんですからね...


それと...たま~にいるんですけど、配布が面倒だからってADP ファイルをサーバーへ置いて共有して使おうなんてこと考えてる人、いませんよね?
...いるわけないよねぇ、だってそれって、ADP がなんのためにあるのか全然判ってないってことだもんねぇ。
そんなこと考えるぐらいだったら MDB 使ってればいいのに。って、MSDE にリンクした MDB をサーバーに置いて共有してたりしてね(笑)

...笑えない?

トラックバック(0)

トラックバックURL: http://www.naboki.net/movabletype/mt-tb.cgi/32