VisualStudioとAccessの関係
目次
Accessが入っているのに「アクセス」できない?
VisualStudio、その中でVB.NETを使って、Accessに接続するプログラムを作ったとき、ハマったポイントです。
Accessに外部から接続するには、ACE.OLEDBが必要
データベースに外部から接続するには、「コネクタ」や「プロバイダ」と呼ばれる、そのデータベース専用のプログラムが必要になります。
Accessの場合、Microsoft.ACE.OLEDB というプロバイダを必要とします。
2022年5月現在、Officeをインストールしようとすると、大抵の場合はサブスクリプションのOffice365になると思います。
この場合、Office365のAccessで作成されたデータベースに接続するためには、Microsoft.ACE.OLEDB.16.0が必要となります。
これをインストールしていないコンピュータで接続しようとすると、見つからない旨のエラーが出ます。
Officeインストーラーには、ACE.OLEDBが含まれていない。
まず、このエラーの発生しているパソコンには、Office365がインストールされていました。
当然ですが、Accessも含まれていて、AccessのDBファイルを作成できましたので問題はありません。
でもエラーは出ます。
つまり、Office365をインストールしただけではダメだという事です。
Access Run timeをインストールしてみる。
こういうエラーの時は、Run timeのインストールでたいてい治ります。
Run timeは、本来、対象の開発環境がインストールされていないコンピュータでプログラムを実行するためのものです。
例えば、Cの開発環境をインストールしていなくても、Cランタイムをインストールすれば、Cで開発されたプログララムは実行できます。
Accessは既にインストールされていて、開発環境はあるはずなのですが、外部からの実行環境が無いのでは仕方ありません。
こちらのサイトからダウンロードします。
いま、大抵のコンピュータは、Windows10の64bitが入っているはずなので、accessruntime_4288-1001_x64_ja-jp.exe をダウンロードします。
ところが、
Microsoft 365がインストールされているから、インストールできない?
このようなメッセージが出て、インストールできません。
ちなみに、2022年5月現在、Microsoft365をインストールすると64ビットがインストールされるため、ランタイムの32bit版である
accessruntime_4288-1001_x86_ja-jp.exe でもエラーになります。
また、Microsoft365はこのエラーメッセージに出ているクイック実行インストーラー版しかありません。
解決策は、Officeをアンインストールするしか……
Microsoft365が載っている限り、先に進めそうもないので、アンインストールします。
その上で、accessruntime_4288-1001_x64_ja-jp.exe をインストールします。
Access Run timeでもダメ?
同じエラーが発生して止まります。
Officeそのものでもだめ、Run timeでもダメってどうすればという感じですが、一度、AccessRun timeを削除します。
え?これ64ビット版の Windows10 なのだけれど?
もう一度、AccessRun timeをインストールします。
インストールするのは、accessruntime_4288-1001_x86_ja-jp.exe つまり、32ビット版用のAccessRun timeになります。
接続成功!
今度は接続に成功しました。
VB.NETが実行時探しているプロバイダーのバージョンは32bitのみで、64bitのものは使用できないようです。。
じゃぁ、ExcelをVB.NETで制御したいときはどうするのさ?
この状態だと、困る問題があります。
例えば、
データベースはAccessで、Excelにそのデータを展開表示するようなプログラムをVB.NETで開発するときはどうしたらいいのか?
結論・あきらめてVBAを使ってください
ちょっと酷すぎですかね?(笑)
あながち間違いではないのは、VBAはプログラム言語としても結構優秀です。ExcelVBAからAccessを制御すれば、概ねご希望には沿えるはずです。
Windows10ではOfficeの32bitと64bitを共存させる事ができません。
通常の方法では、Windows10には64bitのOfficeが入ってしまうため、32bitのAccessRun timeをインストールできません。
64bitのAccessRun timeでは、VB.NETからの制御ができません。
つまり、詰みという事になります。
それでも、どんな犠牲を払ってでも、Access+Excel+VB.NETの開発をする必要があるんだ!
その覚悟やよし!
通常ではない方法で、Officeをインストールして、解決する方法があります。
ただし、上で記載の通り、プロバイダーは32bitが使用されます。
64bitのOfficeで開発したAccessのデータベースを参照した場合、思わぬトラブルに見舞われる事は覚悟の上でお願いします。
方法1 無理矢理32bitのAccessエンジンをインストールする。
Windows10 では、64bitと32bitのOffice系アプリは共存できません。
これはデータベースエンジンも同様で、64bitのOfficeが入ったパソコンには、もう32bitのAccessエンジンはインストールできませんが、通常のインストールでない方法なら裏技があります。
からaccessdatabaseengine.exe をダウンロードします。
ダウンロードしたファイルの置かれているフォルダをコマンドプロンプトで開き、
AccessDatabaseEngine.exe /quiet
と、 /quiet を付けて実行すると、インストールできます。
すると、通常にOfficeをインストールしたWindows10パソコンで、VB.NETによるAccess接続が可能になります。
見えているExcelは64bitの表示ですが、VB.NETはMicrosoft.ACE.OLEDB.16.0を使ってAccessからデータを参照してフォームに表示しています。
方法2 無理矢理32bitのOfficeをインストールする。
Windows10は基本64bitで動作するOSのため、Office もマイクロソフトの推奨どおりにインストールすると、自動で64bit版が入ります。
また、Microsoft365と名前が変わったように、Office中の個別のアプリをインストールする機能もなくなりました。
例えば、Excel だけ欲しい!WordもPowerPointも使わないのに……という方でも、全部盛りの64bit Officeがインストールされます。
これを、32bitのOfficeを指定したり、「このアプリはインストールしたくない」と除外して、必要なアプリだけインストールする方法があります。
Office 展開ツールをMicrosoftのサイトからダウンロードします。
残念ながら2022年5月時点では日本語の用意はありません。
ダウンロードしたファイル、officedeploymenttool_15128-20224.exe を実行します。
全文英語ですが、チェックを入れ、continueを押すだけです。
すると、どこに展開するのか? と場所入力を求められるので、判りやすい場所を指定します。
後の作業のため、新しいフォルダで場所を作る事をお薦めします。
今回はダウンロードディレクトリにOfficedlというフォルダを作りました。
このフォルダには、Officeのセットアップ用exeと、xmlのファイルが幾つか入っています。
<!-- Office 365 client configuration file sample. To be used for Office 365 ProPlus apps,
Office 365 Business apps, Project Pro for Office 365 and Visio Pro for Office 365.
For detailed information regarding configuration options visit: http://aka.ms/ODT.
To use the configuration file be sure to remove the comments
The following sample allows you to download and install the 32 bit version of the Office 365 ProPlus apps
and Visio Pro for Office 365 directly from the Office CDN using the Current Channel
settings -->
<Configuration>
<Add OfficeClientEdition="32" Channel="Current">
<Product ID="O365ProPlusRetail">
<Language ID="en-us" />
</Product>
<Product ID="VisioProRetail">
<Language ID="en-us" />
</Product>
</Add>
<!-- <Updates Enabled="TRUE" Channel="Current" /> -->
<!-- <Display Level="None" AcceptEULA="TRUE" /> -->
<!-- <Property Name="AUTOACTIVATE" Value="1" /> -->
</Configuration>
configuration-Office365-x86.xml を開けてみると、このような内容です。
なんのこっちゃ? という内容ですが、ここに「要らない」Officeプログラムを記載すると、そのアプリの無いOfficeをインストールできます。
では、32bitで、ExcelとAccessしかインストールしないファイルを作ってみましょう。
<Configuration>
<Add OfficeClientEdition="32">
<Product ID="O365ProPlusRetail">
<Language ID="ja-jp"/>
<ExcludeApp ID="Groove"/> <!-- Onedrive for Business -->
<ExcludeApp ID="Lync"/> <!-- Skype for Business -->
<ExcludeApp ID="OneDrive"/>
<ExcludeApp ID="OneNote"/>
<ExcludeApp ID="Outlook"/>
<ExcludeApp ID="PowerPoint"/>
<ExcludeApp ID="Publisher"/>
<ExcludeApp ID="Word"/>
<ExcludeApp ID="Teams"/>
</Product>
</Add>
</Configuration>
OfficeClientEdition=”32″ は32bitをインストールする事を指定しています。
Language ID=”ja-jp” は日本語のOfficeのインストールを指定。
ExcludeApp ID=”Word”は、Wordをインストールから除くという指定です。
みると判りますが、Excel とAccess は載っていないため、インストールされます。
逆にAccessが要らない、PowerPointとWordが欲しいという場合は、ExcludeApp ID=”Access”を加え、ExcludeApp ID=”PowerPointとExcludeApp ID=”Word”を除けば良い亊になります。
記載が終わったら、保存してあるフォルダでShiftキーを押しながら、マウスの右ボタンを押下します。
するとPowerShellウィンドウをここで開く というメニューがありますので、クリックしましょう。
開いたPowerShellウィンドウで、 .\setup.exe /configure [保存した指定ファイル]を発行します。
今回はconfiguration-Office365-x86.xml に保存したので
.\setup.exe /configure configuration-Office365-x86.xml
すると、Officeのダウンロードとインストールがはじまります。
インストールが完了すると、このように32bit版のExcelがインストールされた状態でVB.NETはMicrosoft.ACE.OLEDB.16.0を使ってAccessからデータを参照してフォームに表示しています。
まとめと解決策
まとめると
- Microsoft365のクイックインストール版のAccessには外部から接続するためのプロバイダは含まれていない。
- Run timeや展開ツールでのインストールにはプロバイダが含まれているが、32bitである必要がある。
- 64bitと32bitの共存は基本不可なので、Accessを参照するVB.NETプログラムの作成は困難。
という事になります。
解決策として考えられるのは
- VBでAccessを操作するのは諦める。VBAがあるのだからそれで開発する
- データベースとしてAccessを使用するのは諦める
- 通常ではない方法で、32bit版のAccessか、Accessエンジンを投入する
パソコンを物理的に二台用意できないのであれば、過去の記事に書いたように、VMwareなどで仮想のマシンをつくり、そこでVisualStudioの開発環境を展開するのも良いかもしれません。
個人使用であれば、VMwereは無料です。難点としては、Windows10 側にライセンスが必要なので、思い切ってライセンスを買うか、定期的に開発環境を構築し直すかなどの手間は必要になります。
また、Accessそのものがプログラム言語のVBAを搭載しているので、そちらに切り換える事を検討したり、逆に、超小型コンピュータのRaspberry PiでもSQLデータベースが可動するので、DBそのものを別なものに検討するのも一つの手段です。
いずれにせよ、Microsoftって不親切だなーというはまりポイントのお話でした。