ここからはVBAから「Microsoft Query」等を除いて直接データベースのレコード(フィールド)を操作する場合の方法について説明します。
「Microsoft Query」についてはマクロの記録でコードが取得できるので、そちらを参考にして下さい。
名称 | 概要 |
---|---|
Microsoft Data Access Object(DAO) | Microsoft Access(Microsoft Jet)のデータベースエンジンを直接取り扱います。単一システムか小規模でローカルなシステムに向くものとされているようです。 MDBであればデータベースファイルの作成からテーブルやインデックスの作成などをVBA側から行なえます。これはAccessを含まないMicrosoft OfficeやMicrosoft Excel単体の環境でも可能です。 現在ではデータアクセスはADOが標準になっていますが、MDB環境操作(MDB自体やテーブルの作成等)についてに限ってはDAOの方が便利です。 MDB自体は古くからあるものですが Office2007以降でも問題なく扱えます。 当サイトでは以前はMDBは「Microsoft DAO 3.6 Object Library」を参照設定、ACCDBは「Microsoft Office 1x.0 Access Database Engine Object Library」を参照設定すると説明していました。 ですが、32ビット版、64ビット版の動作確認でMDBとACCDBのどちらも「Microsoft Office 1x.0 Access Database Engine Object Library」の参照設定で済むことが判りました。 Excel単体版等で「Microsoft Office 1x.0 Access Database Engine Object Library」が参照設定リストにない場合は「Microsoft Access データベース エンジン 2010 再頒布可能コンポーネント」をマイクロソフトサイトからダウンロードさせてインストールして下さい。 |
Microsoft Remote Data Object(RDO) | Excel97時代からあるODBC(Microsoft Open Database Connectivity)でのデータベース接続を標準的に取り扱うもので、古くは「業界標準のインターフェイス」とされていたものです。現在ではMicrosoftからもサポート終了となっており、ADOに取って替わっています。 既にこのRDOで作成されているマクロのメンテを行なうような目的であれば別ですが、RDO自体を新規に学ぶ必要はないと思います。 現在のWindows、Office環境では「Microsoft Remote Data Object 2.0」が参照設定のリストにありませんから、 以前にRDOで作成されていたプログラムも動作できない状態です。 当サイトにも以前はRDOで作成したサンプルを掲載していましたが、削除しております。 |
Microsoft Active Data Object(ADO) | RDOが「業界標準のインターフェイス」と唄われていたのに対し、ADOはむしろMicrosoftの独自の方式かも知れません。しかし、別名で「OLEDB」などと呼ばれ、簡単にアプリケーションに組み込めることを唄い文句にしたもののようです。
(今では「OLE」自体が既に「死語」かも知れません) 新規に学ぼうとする場合は、このADOに絞ってしまって良いと思います。 ACCDBについてもADOでは参照ライブラリの変更もなく、接続文字列も変更だけで対応できるはずです。 RDOと同様で、ODBCによる接続も可能なのですが、 Windows側でODBC設定を行なわなくても、VBA上での接続文字列でサーバ名、ユーザー、パスワードなどを指定すれば接続可能なので、他社製データベースプロダクトにも問題なく対応できるようです。 (他社データベースプロダクトに接続する場合はその「ドライバ」のインストールは必要です) MDB環境操作については、上記のDAOの他、ADOXというADOの拡張機能でも可能なのですが、一般情報が古く実情はDAOに及ばなくて「立ち消え」状態のように見えます。 |
SELECT H.[BUSYO_CD]
,B.[BUSYO_NM]
,H.[YAKU_CD]
,Y.[YAKU_NM]
,H.[SCD]
,S.[KANJI_SEI]+S.[KANJI_MEI]
,S.[KANA_SEI]+S.[KANA_MEI]
,S.[NYUSYA_YMD]
,S.[TAISYOKU_YMD]
FROM ((([MST_HAIZOKU] AS H
INNER JOIN [MST_SYAIN] AS S ON H.[SCD]=S.[SCD])
LEFT OUTER JOIN [MST_BUSYO] AS B ON H.[BUSYO_CD]=B.[BUSYO_CD])
LEFT OUTER JOIN [MST_YAKU] AS Y ON H.[YAKU_CD]=Y.[YAKU_CD])
WHERE S.[NYUSYA_YMD]<=#2017-01-01#
AND (S.[TAISYOKU_YMD] IS NULL OR S.[TAISYOKU_YMD]>#2017-01-01#)
ORDER BY H.[BUSYO_CD],H.[YAKU_CD],H.[SCD];