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 の違い
項目 | ODBC | OLE 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ドライバのビット数を合わせる必要あり |