none
「'Microsoft.Jet.OLEDB.4.0'プロバイダはローカルのコンピュータに登録されていません。」 RRS feed

  • 質問

  • 11年前にVS2008で書いたアプリのコードをwindows10でも使えるようVS2019で再編集しようとしています。
    ところがタイトルのようなエラーが出ます。

    ネットで調べてみても私にはややこしく理解できないでいます。
    やさしく解説していただけないでしょうか。Access2010はインストール済です。

    2019年7月20日 0:38

回答

  • 質問者さんの返信が意味不明で、話が通じてないような気がしますが・・・

    > コンパイルオプション: x86  です。

    どこを見て確認したのですか?  旧環境の VS2008 ではなくて新環境の VS2019 を見ましたか?

    > CPU が AnyCPU の場合、
    >    Windows (x64) + Access (x64) の場合、動く。
    >    Windows (x64) + Access (x86) の場合、動かない。
    >    Windows (x86) + Access (x86) の場合、動く。
    > CPU が x86 の場合、
    >    Windows (x64) + Access (x64) の場合、動かない。
    >    Windows (x64) + Access (x86) の場合、動く。
    >     Windows (x86) + Access (x86) の場合、動く。
    > と理解出来ました。

    ちょっと意味が分かりません。「CPU が」の CPU とは何ですか? 「Windows (x64)」の Windows とは何で ( ) 内の x64 とか x86 とは何ですか?

    問題は、上のレスにも書きましたが、

    (1) Microsoft.Jet.OLEDB.4.0 (JET プロバイダ) は 32-bit 版しかない。

    (2) 64-bit OS でアプリが 64-bit で動いているときに 32-bit JET を使おうとして例外がスローされた。

    です。Access は関係ありません。OS とアプリと JET の 32/64-bit 不整合の問題です。上のレスで紹介した記事(下に再掲)をよく読んでください。それ以上分かりやすい説明はないと思いますよ。

    Part 2. .NET Framework 2.0 アプリケーションの 64 ビット対応
    https://blogs.msdn.microsoft.com/nakama/2008/11/05/part-2-net-framework-2-0-64/

    > この画面を表示するための操作方法がわかりませんでした。
    > それで,AnyCpuをx86に変更してビルドしてみましたが,

    これも意味が分かりません。「操作方法がわかりません」なのに「AnyCpuをx86に変更」はどうやってやったのですか?

    そもそも、上に「コンパイルオプション: x86  です」とあるのに Any CPU から x86 に変更したというのはどういうことですか?

    ちなみに、上のレスで貼った画像は、ソリューションエクスプローラーで Properties を右クリックして[開く(O)]を選択すると表示されますのでやってみてください。

    > エラーを解消することはできませんでした。

    「AnyCpuをx86に変更」はどういう操作をしたのか分かりませんが、依然として OS とアプリと JET の 32/64-bit 不整合が解消できてないからエラーも解消できてないということだと思います。

    OS とアプリと JET の 32/64-bit 不整合の問題というのは自分的に自信度 99.9% です。

    下の画像は 64-bit OS 上で x64 でコンパイルした JET を使う Windows Forms を実行したものです。質問者さんと同じ問題が再現てきているのが分かりますか? これを x86 でコンパイルすれば問題は解消します。

    • 回答としてマーク goodwave 2019年7月23日 21:05
    2019年7月21日 0:00

すべての返信

  • JET 4.0 はかなり古いバージョンであり、最近の環境では意図的にインストールしない限り利用できないでしょう。
    かわりに "Microsoft.ACE.OLEDB.12.0" を試してみてください。それで駄目なら、ビルド環境を x86 / x64 とで切り替えてみてください。(インストールされている Office が 32bit 版か 64bit 版かで変わってきます)

    そもそも Access 2010 が使用しているデータベースエンジンは JET 4.0 / DAO 3.6 ではなく、その後継である ACEDAO 14.0 であろうかと思います。

    そして OLE DB Provider についても、"Microsoft.JET.OLEDB.3.51" や "Microsoft.Jet.OLEDB.4.0" は現在使われておらず、代わりに "Microsoft.ACE.OLEDB.12.0" が使われているはずです。Access 2010 の VBA で下記を実行してみてください。

    Debug.Print DAO.Version
    Debug.Print CurrentProject.Connection.Provider
    Debug.Print CurrentProject.Connection.Version
    2019年7月20日 1:06
  • Microsoft.Jet.OLEDB.4.0 (JET プロバイダ) は 32-bit 版しかありません。そのエラーメッセージは 64-bit OS でアプリが 64-bit で動いているときに JET を使おうとしたときに出る例外だと思います。

    つまり、以下の記事の[Step 9. ライブラリアプリケーションにおけるコンパイルスイッチの意味]のセクションの下の図の「例3.」の状態だと思われます。

    Part 2. .NET Framework 2.0 アプリケーションの 64 ビット対応
    https://blogs.msdn.microsoft.com/nakama/2008/11/05/part-2-net-framework-2-0-64/

    質問者さんの OS や Visual Studio のコンパイルオプションが不明ですが、OS が 64-bit でプラットフォームターゲットが AnyCPU で「32 ビットを優先」にチェックが入ってないまたは x64 でしたら、それを x86 に変更してコンパイルし直して試してみてください。

    その他、ACE を使うという手段もありますが、64-bit 版の ACE を使うと Visual Studio から Access には接続できませんし、と言って、32-bit 版と 64-bit 版の ACE は同じ PC 上で共存できない(裏技的手段を使えば別ですが)という悩ましい問題がありますので注意してください。

    なお、JET は OS 同梱で自分の Windows 10 Pro 64-bit には含まれています。


    • 編集済み SurferOnWww 2019年7月20日 2:36 画像追加
    2019年7月20日 2:33
  • なお、JET は OS 同梱で自分の Windows 10 Pro 64-bit には含まれています。

    失礼しました。Vista には含まれておらず、Windows DAC 等でインストールした記憶があったのですが…手元に環境が無いので確認できませんでした。

    Win10 世代では、既定で 4.0 がインストールされているのでしょうかね。

    当方の Win10 Pro x64 環境においても、(32 bit 版の) Jet 4.0 Provider が含まれていることを確認できました。

    上記/下記に ACE 12.0 (Microsoft Office 12.0 Access Database Engine) も表示されているのは、この環境に 32bit 版の Office がインストールされているためです。

    Win10 + Jet 3.51 な組み合わせは流石に無理っぽい…? (下記はWin7)

    2019年7月20日 3:50
  • MDAC version 2.6 and later do not contain Jet or Desktop ODBC driversによると、

    The computer now has the Jet 4.0 SP8 components. The ODBC Desktop Drivers and Visual FoxPro ODBC driver, that are no longer included with MDAC 2.6, are included with the Microsoft Windows 2000 operating system that contains MDAC 2.5. Microsoft Windows Millennium Edition (Me) is also included with MDAC 2.5.

    なので、MDAC 2.6のタイミングでJet Driverが外され、Windows 2000、Windows ME以降にはJet Driverが含まれるようになっているようです。実際、手元のWindows XPイメージには含まれていました。

    他に指摘がありますが、Jet Driverは32bitのみです。

    2019年7月20日 9:30
  • Accessのvbaの使い方がわからず,バージョンなど確認できないでいます。
    ビルドなど,いろいろとやっているのですが思考錯誤の連続でうまくいきません。

    そのなかで,http://daisy64.blogspot.com/2010/05/x64oledb.htmlに
    『長らくx64環境からMDBファイルにアクセスすることが出来なかった。
    (正しくは、32bitアプリとしてWOW64上で動作する様に、ビルド構成としてx86を指定する必要があった。)Office2010(x64)をインストールすることにより、64bitのアプリケーションでもMDBファイルにアクセスできるようになる。ConnectionStringで”Microsoft.ACE.OLEDB.12.0”するだけである。』

    とあったので,いまはこのことを確認しようとしています。

    2019年7月20日 9:46
  • > そのなかで,http://daisy64.blogspot.com/2010/05/x64oledb.html

    そういうのを見て自分で何とかしようと思うのなら、ここで聞かないで、自分でググって調べて何とかするなりして勝手にやったらいいのでは?

    レスをもらった人へのフィードバックは書かないのですか? 書かないのは大変失礼な話だと思いますよ。
    2019年7月20日 10:37
  • SuferOnWww 様のお叱りを受け自分の無礼な態度に恥じ入っております。
    ご自身の貴重な時間を割いてご親切に返信を書いて下さっている皆様に対して感謝の気持ちをまずもって表明し,ご教示いただいたことついて自分が何を理解し何につまずいているかの返信ををすべきところを,ご教示いただいたことをさておいて別の方向で解決しょうとするような返信は全くもって許されることではありません。ご返信いただいた皆様に深くお詫び申し上げます。

    魔界の仮面弁士さんにご教示いただいたことについて

    >Access 2010 の VBA で下記を実行してみてください。
    Alt+F11 でvbaを開くことはできたのですが,なぜかコードを記入できないでいます。本屋に行って調べてみようと思います。

    >"Microsoft.ACE.OLEDB.12.0" を試してみてください。
    どのようにして試すのかと思いググッてみると「ConnectionStringで”Microsoft.ACE.OLEDB.12.0”する」とあったので,
    DataSetのコードで”Microsoft.Jet.OLEDB.4.0”を探して”Microsoft.ACE.OLEDB.12.0”と書き換えるとよいのだと理解し,
    ”Microsoft.Jet.OLEDB.4.0”を探してみたのですが見つかりませんでした。それで,この直後にコード全部を表示する方法を質問させていただきました。

    SurferOnWww さんにご教示いただいたことについて

    >質問者さんの OS や Visual Studio のコンパイルオプションが不明です
      OS: windows10
      Visual Studio: 2019
      使用言語: c#
      コンパイルオプション: x86  です。

    >エラーメッセージは 64-bit OS でアプリが 64-bit で動いているときに JET を使おうとしたときに出る例外だと思います。
    CPU が AnyCPU の場合、
        Windows (x64) + Access (x64) の場合、動く。
        Windows (x64) + Access (x86) の場合、動かない。
        Windows (x86) + Access (x86) の場合、動く。
    CPU が x86 の場合、
        Windows (x64) + Access (x64) の場合、動かない。
        Windows (x64) + Access (x86) の場合、動く。
        Windows (x86) + Access (x86) の場合、動く。
    と理解出来ました。

    >OS が 64-bit でプラットフォームターゲットが AnyCPU で「32 ビットを優先」にチェックが入ってないまたは x64 でしたら、それを x86 に変更してコンパイルし直して試してみてください。
    ご丁寧に画像を表示してご教示いただきましたが,この画面を表示するための操作方法がわかりませんでした。
    それで,AnyCpuをx86に変更してビルドしてみましたが,エラーを解消することはできませんでした。

    佐祐理さんからご教示されたこと

    英文で書かれてあることはデータベース接続時の留意点だとはわかりますが内容を理解するには勉強が必要です。

    >Jet Driverは32bitのみです。
     間違いかも知れませんがそのため”Microsoft.ACE.OLEDB.12.0”に変更するのがよいということでしょうか?

    ご返信いただいた皆さん,ありがとうございました。


    • 編集済み goodwave 2019年7月20日 22:35 追加
    2019年7月20日 21:35
  • 質問者さんの返信が意味不明で、話が通じてないような気がしますが・・・

    > コンパイルオプション: x86  です。

    どこを見て確認したのですか?  旧環境の VS2008 ではなくて新環境の VS2019 を見ましたか?

    > CPU が AnyCPU の場合、
    >    Windows (x64) + Access (x64) の場合、動く。
    >    Windows (x64) + Access (x86) の場合、動かない。
    >    Windows (x86) + Access (x86) の場合、動く。
    > CPU が x86 の場合、
    >    Windows (x64) + Access (x64) の場合、動かない。
    >    Windows (x64) + Access (x86) の場合、動く。
    >     Windows (x86) + Access (x86) の場合、動く。
    > と理解出来ました。

    ちょっと意味が分かりません。「CPU が」の CPU とは何ですか? 「Windows (x64)」の Windows とは何で ( ) 内の x64 とか x86 とは何ですか?

    問題は、上のレスにも書きましたが、

    (1) Microsoft.Jet.OLEDB.4.0 (JET プロバイダ) は 32-bit 版しかない。

    (2) 64-bit OS でアプリが 64-bit で動いているときに 32-bit JET を使おうとして例外がスローされた。

    です。Access は関係ありません。OS とアプリと JET の 32/64-bit 不整合の問題です。上のレスで紹介した記事(下に再掲)をよく読んでください。それ以上分かりやすい説明はないと思いますよ。

    Part 2. .NET Framework 2.0 アプリケーションの 64 ビット対応
    https://blogs.msdn.microsoft.com/nakama/2008/11/05/part-2-net-framework-2-0-64/

    > この画面を表示するための操作方法がわかりませんでした。
    > それで,AnyCpuをx86に変更してビルドしてみましたが,

    これも意味が分かりません。「操作方法がわかりません」なのに「AnyCpuをx86に変更」はどうやってやったのですか?

    そもそも、上に「コンパイルオプション: x86  です」とあるのに Any CPU から x86 に変更したというのはどういうことですか?

    ちなみに、上のレスで貼った画像は、ソリューションエクスプローラーで Properties を右クリックして[開く(O)]を選択すると表示されますのでやってみてください。

    > エラーを解消することはできませんでした。

    「AnyCpuをx86に変更」はどういう操作をしたのか分かりませんが、依然として OS とアプリと JET の 32/64-bit 不整合が解消できてないからエラーも解消できてないということだと思います。

    OS とアプリと JET の 32/64-bit 不整合の問題というのは自分的に自信度 99.9% です。

    下の画像は 64-bit OS 上で x64 でコンパイルした JET を使う Windows Forms を実行したものです。質問者さんと同じ問題が再現てきているのが分かりますか? これを x86 でコンパイルすれば問題は解消します。

    • 回答としてマーク goodwave 2019年7月23日 21:05
    2019年7月21日 0:00
  • SurferOnWwwさん,返信が遅れて申し訳ありませでしたがご教示のとおりx86 でコンパイルすることによってエラーを解消することができました。ご親切にお教えいただきありがとうございました。

    • 回答としてマーク goodwave 2019年7月22日 21:35
    • 回答としてマークされていない goodwave 2019年7月23日 21:09
    2019年7月22日 21:35
  • 「回答としてマーク」は質問者さんの書き込みではなく、回答者の書き込みの内問題解決に役に立ったものに付ける (複数可) べきと思いますよ。

    回答がどれも問題解決の役に立っておらず、自己解決して、その内容を書いてマークを付けると言うことなら話は別ですが、今回はそうじゃないですよね。 

    2019年7月22日 21:57
  • あと、JET を使ったまま x86 でコンパイルというのを恒久処置としていいのか、ACE に切り替える検討を含めて考えて決めた方が良いかもしれません。

    2019年7月22日 22:51