##このエラー表示の問題点##
エクセルやアクセスから外部のデータベースに接続する時によく出るエラーがこの「インストール可能なISAMドライバーが見つかりません」エラー。このエラーの完全解決法の記事です。
このエラーメッセージが出ても色んな原因があるし、その原因によって解決方法も沢山種類があり、更に悪い事にこの表示と全く関係がない原因の時もあります。それにより無駄なネット検索でかなりの時間を無駄にします(無駄にしました)。本当に困ったものです。
僕は今回このエラーで大ハマり(およそ1カ月間は格闘した)した末にもしかしたら世界で初めてかもしれない(大袈裟か)完全解決をしたので、ここにその解決方法を記録して皆さんと共有したいと思います。
##接続文字列のスペルミスによる構文エラー##
「ISAMドライバーが見つかりません。」と言うのだから、そのドライバーを見つけてあげなくては、と普通思いますよね。しかし、それが問題じゃない時が多々あります。例えば自分のコードの中にスペルミスがあっただけでこのエラーが出てきます。特に接続文字列です。
ちなみに自分の作っているプログラムと接続しようとしているデータベースとの橋渡しをしてくれるツールがドライバーやプロバイダーです。外部のデータベースに接続する時に自分のプログラムにどこのデータベースのどのテーブルにどうやって接続するかを指示する必要があります。
その命令文を接続文字列と言いますが、その接続文字列内でスペルミスがあった時に「インストール可能なISAMドライバーが見つかりません」エラーが出てきます。下記のリンクの事例では空白が入っていなかっただけだったという事です。
原因は接続文字列の間違い(上の事例では Data と Source の間に半角スペースがない)でした。
https://teratail.com/questions/139158
ですから「ISAMドライバーが見つかりません」エラーが出たらまず自分の接続文字列が正しいかどうかを確認するのが第一ステップです。
##WindowsやOfficeのバージョンの違いによる接続文字列の構文エラー##
開発者である自分のPCでは問題がないし、ユーザーのPCでも問題があるPCと無いPCがある場合があります。これはそのPCのWindowsのバージョンやOfficeやAccessのバージョンが違うために接続文字列を変えなければいけない時があるからです。
この時は「ISAMドライバーが見つかりません」エラー以外のエラーメッセージの時もあります。これについては「Access(32bit/64bit)、mdb形式/accdb形式で使用できるADOの参照先について」の記事がお勧めです。
ですので問題の起きているPCのWindowsのバージョンとbit数、またOfficeのバージョンとbit数をまず確認して下さい。
Windowsのバージョンの確認の仕方:「コントロールパネル」⇒「システム」
MS Officeのバージョンの確認の仕方:メニューバー内の「ファイル」⇒ 画面左下の「アカウント」⇒ 画面右下の「Excelのバージョン情報」
##PCに最適なISAMドライバーが入っていない:パート1##
接続文字列は絶対に間違っていないのになぜか「ISAMドライバーが見つかりません」エラーが出るー!ここで初めて最適なISAMドライバーが入っていない可能性が大になります。
下のマイクロソフトの記事によると最初からISAMドライバーが入っていない時もあるそうです。
データソース ODBC 管理者によって Microsoft Access によって提供されたドライバー用の ODBC DSN を作成しようとすると、失敗します。 この問題は、Office のクイック実行 (C2R) インストールを使用している場合に発生します。
「Access ODBC ドライバーまたは OLEDB プロバイダーを Office クイック実行アプリケーションの外部で使用することはできません」
無いものは入れるしかないのです。幸いマイクロソフトのサイトからそれをダウンロードできます。
これはAccess データベースエンジンと言いますが、最新版は2016ですが、2010版もあり、英語圏では2010版を薦めているサイトもあります。
Microsoft Access データベースエンジン2016再頒布可能パッケージ
Microsoft Access データベース エンジン 2010 再頒布可能コンポーネント
もう一つ重要なのはどちらも64 bit版と32 bit版があるのですが、困った事にどちらを入れるかはネットでは意見が分かれています。
僕はインストールされているOfficeのbitと同じbit版を入れるのを試して上手く行かなかったら他の組合せを試せば良いと思います。その時必ず前のものをアンインストールしてからインストールして下さい。
##PCに最適なISAMドライバーが入っていない:パート2、根本解決##
ここまで書いてきてなんですが、実は僕はその全ての組合せ(2010/2016、32 bit/64 bit)のAccess データベースエンジンを試しても「ISAMドライバーが見つかりません」エラーが直りませんでした。もう涙目です。
なぜなら日本語と英語でネットを何十時間も検索しましたが、前述した解決策以外の提案を見つける事が出来ないのです。どのネットフォーラムでも「Access データベースエンジン」をインストールする事で議論が止まっています。
更に「Access データベースエンジン」をインストールしたけど解決しないというコメントもかなりありますが、なんとその後は誰も解決策を提示していません。そこにはITの強者が沢山いるわけですが彼らも解決策が無いわけです。
さらに数年後にそのポストに別の人が自分も同じ問題を今持っているが解決したかと言うコメントまでありますが、その後のコメントは無しです。皆さん諦めていた模様です。
僕も何度もくじけそうになったけど、あきらめずに何度も同じ記事を読んで試行錯誤を続けました。本当に疲れる。
そしてある時、前回は気にも留めなかったある人の「問題になるPCにはアクセスが入ってない事が多い気がする」と言うコメントが気になり、自分の今まで問題のあったPCにはアクセスが入ってなかった事に気が付きました。
そしてOffice 365が入っているPCは間違いなく問題が無かったのでネットで探してOffice 365 Accessランタイムを無料でダウンロードして問題のPCに入れてみたのです。
「Office 365 Access ランタイムのダウンロードとインストールをする」
そしたら、なんと、いとも簡単にあのエラーが解消して無事にデータベースに接続できてしまいました!!!ちょっと呆気に取られましたね。何でこんな簡単な方法が今までネットで探せなかったのだろう?日本語と英語圏では僕が世界で初めてこれをやったのか?(爆笑)
ちなみに今回のPCにはOffice 2013の32 bit版が入っていたのでAccess ランタイムも32 bit版を入れました。
緊急のクライアントさんに直ぐに連絡をしてこの方法を試してもらったら、やっぱり上手く行きました!まだ世界で2台しか試していませんが(笑)、皆さんも試して頂いて結果を教えて頂いたら幸いです。
ちなみにランタイムは少し重いので、アンインストールしても接続ドライバーは残るのを期待してランタイムをアンインストールしてみました。しかし残念ながら接続ドライバーも一緒にアンインストールされてしまって、またあのエラーが出るのです。ですのでこのランタイムは残す必要があります。
話変わってこのランタイムが入っているとVBAの参照設定で「Microsoft Office 16.0 Access Database Engine Object Library」を入れなくても動きます。
追伸:下の記事の様にレジストリを改善する案もありましたが、正直それをやる自信が無いしリスクが高いから挑戦しませんでした。その記事はADOについて内容が濃いですので参考までにリンクを貼っておきます。