【ACCESS】「ODBC」と「OLE DB」の違いは?

ACCESS

ACCESSで開発をしていると「ODBC」とか「OLE DB」って言葉をよく見かけるけど、中身や違いがよく分からない!

けど、なんとなく使えているからいいか。。っていう人も多いかと思います。

よく分からないけどなんとなく使えている人ってすごいですよね!

そんな、なんとなくを少しでも「分かる」ように解説します!

ODBCのイメージと特徴

ODBCは、アプリケーションとあらゆる種類のリレーショナルデータベースの間に入って、共通の言語(SQL)でやりとりできるようにします。

ODBCのイメージ

ODBCはOpen Database Connectivityの略で、アプリケーションとデータベースをつなぐための共通インターフェース(API)です。

Microsoftが開発しましたが、今では多くのプラットフォームで使われています。

[アプリケーション] → ODBCドライバ → [データベース]

例)ACCESS→ODBCドライバ→SQLServer

特徴と利点

特徴説明
データベースに依存しないMySQLでもPostgreSQLでも同じコードで使える(ドライバだけ変える)
標準化されたSQL使用アプリケーションは基本的に標準SQLで記述できる
多くの言語に対応Python、C/C++、Java、Excel、Accessなどで使える

OLE DBの特徴と使用例

OLE DBはObject Linking and Embedding, Databaseの略で、Microsoftが開発したデータベースアクセス用のAPIのひとつです。

異なる種類のデータソース(リレーショナル・データベース、スプレッドシート、テキストファイルなど)に統一的な方法でアクセスできるようにするための仕組みです。

OLE DB の特徴

  • 異種データソース対応:SQL Serverだけでなく、Access、Excel、Oracle、CSVファイルなどにもアクセス可能。
  • COMベース:MicrosoftのCOM(Component Object Model)技術を使って構築されている。
  • 高性能:ODBC(Open Database Connectivity)より柔軟で、細かい制御が可能な場面もある。

よくある使用例

  • Excelからデータを読み取る(ADO経由で)
  • SQL Server Management Studio(SSMS)でリンクサーバーを作成する
  • VBScriptやVBA、C++、.NETアプリケーションからデータベース操作

ODBC と OLE DB の違い

項目ODBCOLE DB
対象主にリレーショナルDBリレーショナル + 非リレーショナル
技術基盤CベースCOMベース(Windows中心)
汎用性高(クロスプラットフォーム)やや低(Windows向け)
構文SQL中心より細かい操作が可能

ADOってどっちを利用しているの?

ADO(ActiveX Data Objects) は、OLE DB をベースに作られた上位の抽象レイヤーです。

つまり、ADO は OLE DB の利用者(コンシューマー)になります。

アプリケーション→ADO→OLE DB→データベース

ADOをODBC経由で接続する方法

ADO で接続文字列に [Provider=MSDASQL] を指定すれば、ODBC 経由でデータベースにアクセスできます。

例1:ODBC DSNを使った接続(MyDSNという名前のDSN)

Dim conn As Object
Set conn = CreateObject("ADODB.Connection")

conn.Open "Provider=MSDASQL;DSN=MyDSN;UID=myuser;PWD=mypassword;"

例2:DSNレス(DSNを使わず、ODBCのドライバ情報を直接書く)

Dim conn As Object
Set conn = CreateObject("ADODB.Connection")

conn.Open "Provider=MSDASQL;Driver={MySQL ODBC 8.0 Unicode Driver};Server=localhost;Database=testdb;User=myuser;Password=mypassword;Option=3;"
注意点
注意点内容
速度ADO → OLE DB → ODBC という階層なので、純粋なODBCより遅くなることがある
互換性最新のODBCドライバがOLE DB経由でうまく動かないことも稀にある
64bit/32bit問題ADOの実行環境(VBA/Excelなど)とODBCドライバのビット数を合わせる必要あり

タイトルとURLをコピーしました