【HTA+ADODB】プロバイダーが見つかりません。正しくインストールされていない可能性があります。

Windows10, 日記備忘録

HTAファイル内に正しく記述した ADODB にコネクトできない。そんな、回避策の備忘録です。

環境

Win10
HTAファイル
IE11
MS Access 2019(64bit)
Provider="Microsoft.ACE.OLEDB.12.0";

htaファイルのソース

<html>
<head>
<title>ado connect test</title>
</head>
<script type="text/javascript">
var filepath = "C:\\data.xlsx"; //Data SourceのExcelファイルをフルパス指定
var readonly = 1;
var hdr = 1;

function loadDatabase(){
    _loadDatabase(filepath, readonly, hdr);
    return false;
}

function _loadDatabase( filepath, readonly, hdr ){
    var ado = new ActiveXObject("ADODB.Connection");
    var connect = [];
    connect.push('Provider="Microsoft.ACE.OLEDB.12.0"; Data Source="' + filepath + '"; Extended Properties="Excel 12.0;IMEX=1;HDR=' + (hdr ? 'Yes' :'No') + ';ReadOnly=' + (readonly ? 1 : 0) + ';"');
    var i = 0;
    while ( i <= connect.length - 1){
        try{
            ado.Open(connect[i]);
            alert('Connected Successfully.');
            ado.Close();
            break;
        }catch(e){
            alert(e.message);
        }
        i++;	
    }
}
</script>
<body>
<button onclick="loadDatabase();">loadDatabase</button><br />
</body>
</html>

ADODBに接続を試みるソースです。空のExcelファイルをひとつ用意して、6行目のパスを書き換えて下さい。
ファイルパスが「C:\sample\test001\data.xlsx」なら6行目は「C:\\sample\\test001\\data.xlsx」となる。(\\とする)

ソースコードは、test.hta でデスクトップに保存するといいでしょう。

htaファイルの実行画面


「loadDatabase」ボタンClick

結果

失敗時:


成功時:


失敗時の回避方法

回避策は2点あります。

ショートカットで回避するか、公式ページから再頒布可能コンポーネントを入手してインストールして回避するか。
都合の良い方を選択します。

ショーカットで回避する。

作成するシートカットのリンク先の冒頭に %WinDir%\System32\mshta.exe を追加してあげる。
  1. このHTAファイルへのショートカットを作成する。
  2. ショートカットのプロパティを開いて、以下の様に設定する。
    • リンク先を「%WinDir%\System32\mshta.exe C:\test.hta」(HTAファイルへのフルパス)
  3. 保存
  4. ショートカットを実行して。「loadDatabase」ボタンをクリックする。
上記は、32bit版mshta.exeを経由させることで、回避する方法です。

再頒布可能コンポーネントで回避する。

以下の公式URLからAccessDatabaseEngineを入手してインストールする。
まずは、インストールが必要なのかを確認します。

「コントロールパネル」→「管理ツール」→「ODBC データ ソース (64 ビット)」

プラットフォーム欄が「64 ビット」の表示なら必要です。「32/64 ビット」の表示なら不要です。
必要なら、32bit版コンポーネントをインストールしてエラーを回避させます。
不要なら、別の原因で掲題のエラーが出ています。

以下のURLから32ビット版コンポーネントの入手が可能です。
https://www.microsoft.com/ja-JP/download/details.aspx?id=54920

accessdatabaseengine.exe を選択してください。
X64 が付くファイルは不要です。

余談

ちなみに、ActiveXObjectは InternetExplorer のみで動作する。
Chorome,Edge,FireFox等はサポート対象外のため動作しない。
IE11のサポートは2021年6月15日で終わり、IE11上のActiveXObjectは使用できなくなります。
EdgeのIEモードで使いましょう。使えるのかな・・・?