データアクセス手法

WindowsプラットフォームでRDBMS(非RDBMS)にアクセスする手法には、さまざまな手法があり(ありすぎ!)、どれを使えば良いか混乱するときがあります。ここでは、それぞれの手法の特徴とメリット、デメリットを記述し、アクセス手法の選定基準となるもの示します。なお、データベースエンジンの選定基準は、こちらのページを参照してください。

以下に示すもの以外にもOLE DBとかありますが、データベース以外のもの向けに開発され、直接操作するのではなくADO経由でアクセスするほうが主流になった経緯があるので割愛します。また、ADOの少ない機能を補完するADOX(Microsoft ADO Extensions for DDL and Security:ADOでDDLを使えるようにするためのもの), JRO(Microsoft Jet and Replication Objects:ADOにレプリカ機能を追加したもの)もあります。


個人的見解:データベースエンジンがJET(mdb)であるなら、DAOを利用し、MSDEや、他のRDBMSが対象ならODBCを直接呼び出したほうが良いと思われるが、SQLの互換性の確保、混乱を避けるためODBCを直接利用したほうが良いと思う。(MFCでCDatabase/CRecordsetを使って開発)。なお、VS.NET2002/2003では、既存のDAOプロジェクトはサポートしているが、DAOのウィザードはサポートされていない。
用件 ODBC DAO RDO ADO
TARGET言語 C/C++ VB, Office VB, Office VB, Office, ASP
実装された歴史 1 2 3 4
対象データソース ODBC ドライバに対応したローカルまたはリモートのデータ ソース JET(*.mdb), JET(RDBMS), その他 RDBMS OLE DB Provider
特徴 低レベル
汎用性あり
単一システムのアプリケーションや小規模でローカルなネットワークで使用するのに最も適している。
MDBには、ODBCよりDAOの方が効率的。
SQL Server, Oracle、そのほかの大規模なリレーショナルデータベースの多くの開発者に使用されている。 DAO/RDOを簡素化したもの。
将来性 あり? なし  なし なし(ADO.NETに移行?)
DDLサポート(*1) ODBC API を直接呼び出す場合だけ可 可(?) 不可(ADOXでサポート)
DMLサポート(*1) 可(?) 不可(ADOXでサポート)

以下にデータベースにアクセスするモジュールの階層図を示します。

DAOにもODBC Directというのがあって、JET Engineを超えて、直接ODBC Driverにアクセスすることができます。

なお、Access DB(MDB)に対してADOを利用するときは、OLE DB Providerを通してアクセスします。


用語解説 *1
データ定義言語 (DDL: Data Definition Language)  データベースの作成と削除、テーブルの作成と削除、テーブルのフィールドとインデックスの定義など、データベースの構造に影響する操作を行うことができます。
データ操作言語 (DML: Data Manipulation Language)  クエリの実行、レコードの追加、削除、編集など、データベースの内容を操作できます。

参考リンク
DAO と ODBC の使い分け http://www.microsoft.com/japan/msdn/library/default.asp?
url=/japan/msdn/library/ja/vccore/html/_core_should_i_use_dao_or_odbc.3f.asp
ADO または DAO を選択して Access データベースを使用する http://www.microsoft.com/japan/developer/library/odeopg/
deovrchoosingadoordaoforworkingwithaccessdatabases.htm
ADO と ADO.NET の違い http://www.datadirect.co.jp/technote/ADOvsADODOTNET.asp
DAO と ADO どちらを選ぶ? http://homepage2.nifty.com/inform/vbdb/daoado.htm
INSERT INTO と AddNew どちらが速い? http://homepage2.nifty.com/inform/vbdb/addnew.htm
DAOとADOを比較する http://homepage1.nifty.com/tsware/labo/labo_23.htm
ADOの実用度は向上したのか http://www.int21.co.jp/pcdn/vb/noriolib/vbmag/0006/ado/
Microsoft Access2000 評価レポート - 早期版 (1999/9/1) http://www2p.biglobe.ne.jp/~sakurait/cstrue/cl1999/cl1999c4.html