none
TableAdapterの64bit対応について RRS feed

  • 質問

  • 【概要】
    TableAdapter は、「Microsoft Access データベース エンジン 2010 再頒布可能コンポーネント」の
    64bit に対応してないのでしょうか?

     ・32bit(x86)では、コーディングも実行も正常に動作する。
     ・64bit(x64)では、コーディングできない。
     ・32bit(x86)で、無理にコーディングし、その後に実行環境(プラットフォーム)を64bit(x64)に変更したら動作しない。


    【主な操作】
    Visual Studio 2015のプロジェクト内でMicrosoftレポートで帳票を作成したいので、
    (プラットフォーム:x64)

    1.データセットを追加。
    2.TableAdapterを追加。
    3.TableAdapter構成ウィザードで「Microsoft Access データベース ファイル」を選択。
       → 対象DB:Access 2013 accdb

     ★Microsoft Access データベース エンジン 2010 再頒布可能コンポーネント
      1)上記の64bitをインストール時
        → 「Microsoft.ACE.OLEDB.12.0プロバイダーはローカルコンピュータに登録されていません」エラーで続行できない。


    【環境等】
    OS:Windows7 Professional 64bit (SP1)
    開発環境:Visual Studio 2015 Community (VB.NET)
    .NET:.NET Framework 4.6.1
    DB:Access 2013 accdb
     ・他PCで作成
     ・該当PCには、Access 2013はインストールしていない。
     ・Visual Studioで作成したプログラムからの読み書きは問題なし。


    よろしくお願いします。

    2017年8月2日 0:55

すべての返信

  • > TableAdapter は、「Microsoft Access データベース エンジン 2010 再頒布可能
    > コンポーネント」の64bit に対応してないのでしょうか?

    TableAdapter が 64-bit に対応してないのではなくて、TableAtapter を生成する Visual Studio が対応してないのだと思います。

    Visual Studio には 32-bit 版しかありません。Visual Studio が TableAdapter を生成する際、Microsoft.ACE.OLEDB.12.0プロバイダー経由で Access に接続に行きますが、ACE が 64-bit 版なので接続に失敗するということでしょう。

    【追加情報】

    32 /64-bit の話は、ちょっと古い記事ですが、以下が参考になると思います。Visual Studio の話は Part 1 の[Step 6. x64 版 Windows 上での Visual Studio 2008 の利用]というセクションに書いてあります。(記事は VS2008 ですが 32-bit 版しかないのは VS2015 も同じです)

    Part 1. 64 ビット Windows OS の基本知識
    https://blogs.msdn.microsoft.com/nakama/2008/10/30/part-1-64-windows-os/

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


    32-bit 版 ACE がインストールされていれば、Visual Studio のサーバーエクスプローラーで Access に接続する際、以下の記事の画像のような「詳細プロパティ」ダイアログの Provider で JET または ACE が選べるはずです。

    Access 2007 の DB を利用するアプリ開発
    http://surferonwww.info/BlogEngine/post/2011/11/08/Development-of-application-which-uses-accdb-file-of-Access-2007.aspx



    2017年8月2日 1:18
  • 【追伸】

    今頃気が付いて何ですが・・・

    > ・32bit(x86)では、コーディングも実行も正常に動作する。

    ということは、開発マシンには 32-bit 版の ACE がインストールしてあって、Visual Studio から Access には接続できるのですか?

    で、アプリのプラットフォームターゲットを x86 にすると、アプリは WOW 上で 32-bit で動いて、ACE も 32-bit なので問題ないということなのですか?

    であれば、それが最終的にあるべき姿であって、プラットフォームターゲットを x64 に変更するなんてことは考えなくてよいと思いますが。

    何故なら、その「x86 アプリ」+「32-bit 版 ACE」は 32 / 64-bit OS のどちらでも動く(64-bit OS では WOW 上で動く)からです。

    プラットフォームターゲット x64 でコンパイルする必要は全くない、というか、そんなことをすると、まだ巷にはたくさん存在すると思われる 32-bit OS 上では動かなくなってしまうので NG かと思います。

    2017年8月2日 2:09
  • 1)アプリ全体を32bitで動作させる(メモリは4GBまでしか使えなくなる)

    2)mdbの読み書きの部分だプロセスを独立させてx86で動かす(x64なメインのアプリとはIPCでやりとりするように変更)

    3)サポート外だが、開発環境では、無理矢理共存させる(実行環境ではx64版ACEを入れる)

    などが対処方法としては挙げられるとは思います。


    jzkey

    2017年8月2日 12:30