66

私は2つのプロジェクト(テスト用のWord-TemplateプロジェクトとVB.Netコンソールアプリケーション)を含むVisual Studio 2008ソリューションを持っています。どちらのプロジェクトもMS-Access 2007データベースファイルへの接続を開くデータベースプロジェクトを参照し、System.Data.OleDbへの参照を持っています。データベースプロジェクトでは、私は次のようにデータテーブルを取得する機能を持っています

 private class AdminDatabase
   ' stores the connection string which is set in the New() method
   dim strAdminConnection as string

   public sub New()
   ...
   adminName = dlgopen.FileName
   conAdminDB = New OleDbConnection
   conAdminDB.ConnectionString = "Data Source='" + adminName + "';" + _
       "Provider=Microsoft.ACE.OLEDB.12.0"

   ' store the connection string in strAdminConnection
   strAdminConnection = conAdminDB.ConnectionString.ToString()
   My.Settings.SetUserOverride("AdminConnectionString", strAdminConnection)
   ...
   End Sub

   ' retrieves data from the database
   Public Function getDataTable(ByVal sqlStatement As String) As DataTable
        Dim ds As New DataSet
        Dim dt As New DataTable
        Dim da As New OleDbDataAdapter
        Dim localCon As New OleDbConnection


        localCon.ConnectionString = strAdminConnection

        Using localCon
            Dim command As OleDbCommand = localCon.CreateCommand()
            command.CommandText = sqlStatement
            localCon.Open()
            da.SelectCommand = command
            da.Fill(dt)
            getDataTable = dt
        End Using

    End Function
End Class

Word 2007テンプレートプロジェクトからこの関数を呼び出すと、すべて問題なく動作します。エラーなし。しかし、コンソールアプリケーションから実行すると、次の例外が発生します。

ex = {"'Microsoft.ACE.OLEDB.12.0'   プロバイダはに登録されていません   ローカルマシン。 "}

どちらのプロジェクトにも同じ参照があり、コンソールアプリケーションは最初に書いたときに動作しました(少し前)が、現在は動作を停止しています。私は何かを見逃しているに違いありませんが、私は何を知りません。何か案は?


  • 私も同じ問題に直面しています。あなたは私を助けてもらえますか? 2007アクセスデータベースプロバイダのインストーラはどこにありますか。 - user204420
  • - >をご覧ください。stackoverflow.com/questions/6649363 - Bernhard

9 답변


42

私はAccess 2007データベースを使用し、同じエラーを受けていたVisual Studio 2008とビジュアルベーシックプログラムを持っています。 64ビットシステムを実行している場合は、プログラムのプロパティで高度なコンパイル設定をx86に変更することを推奨するスレッドがいくつかあります。これまでのところ私は自分のプログラムに問題を抱えていません。


  • しかし、asp.netアプリケーションの場合、これはIISによって決定されるので、この記事をチェックしてください。support.microsoft.com/kb/894435/en-us - devzero
  • 私はASP.NETアプリケーションで同じ問題を抱えていました - コードを実行することはローカルに働きましたが、サーバーで失敗しました。ここに2007 Office System Driver:Data Connectivity Componentsをインストールするために必要でした。microsoft.com/downloads/en/…その後、32ビットアプリケーションを許可するようにWebサイトのワーカープロセス(アプリケーションプール)を有効にする必要がありました。 - Keith
  • これは、x86を使用できない人には役立ちません。 64ビット版のACEがあります。goo.gl/Cxsf1ただし、互換性の問題があるため、Office 2003をアンインストールする必要があります。 - Jordan
  • 私はインストールされているアクセスDBエンジンの再配布プログラムと64ビットOSとOffice 2010のx86バージョンを持っている、私はインターネットですべての可能な解決策でエラーを修正しようとしています..しかし、それは動作しません。同じプロバイダーが機能する別のプロジェクトもあります。 - incomplete

52

基本的に、64ビットマシンを使用している場合、IIS 7は(デフォルトでは)データベースエンジンが動作する32ビットアプリケーションに対応していません。だからここにまさにあなたがしていることです:

1)2007データベースエンジンがインストールされていることを確認します。これは次の場所からダウンロードできます。http://www.microsoft.com/downloads/details.aspx?FamilyID=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=en

2)IIS 7マネージャを開き、[アプリケーションプール]領域を開きます。右側のサイドバーに、「アプリケーションプールのデフォルト設定」というオプションがあります。それをクリックすると、ウィンドウにオプションがポップアップ表示されます。

3)2番目のフィールドで、[Enable 32-bit applications]がデフォルトでFALSEに設定されている可能性があります。 「false」と表示されている箇所をクリックして、「true」に変更します。

4)アプリプールを再起動します(これを行うには、STOPの代わりにRECYCLEを押してからSTARTを押しても機能します)。

5)完了し、あなたのエラーメッセージが消えます。


  • これは私のために機能しました...階層化されたWebアプリケーションでWCFを使用しているVisual Studio 2010 Premium、Windows Server 2008 R2、IIS 7。 - longda
  • ありがとう - まさに私が必要としていたもの! - Andy
  • +1、あなたの推薦はうまくいった。 - Phil
  • これは、App Poolが完全に32ビットモードで動作することを意味します。 - John Weldon

7

データベースは32ビット、コンソールは64ビットで64ビットシステムを実行していますか。 64ビットを実行し、報告したものと同じエラーを報告するMS Accessドライバはありません。


  • はい、私は64ビットXPを実行しています、これはまさに問題でした。アドバンストコンパイルオプションのターゲットCPUをx86ビットアプリケーションに変更しました。ありがとう - Azim

5


溶液:

それでおしまい!リンクをくれてありがとうArjun Paudel。これがXNA Creator's Club Onlineで見つけられた解決策です。それはStephen Styrchakによるものです。

次のエラーは私があなたが64bit用にコンパイルしていると信じることを私に示唆している:

'Microsoft .ACE.OELDB.12.0'プロバイダは、ローカルコンピュータに登録されていません

私はエクスプレス版を持っていませんが、次のステップは2008エクスプレスで有効ですか?

http://forums.xna.com/forums/t/4377.aspx#22601

http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/ed374d4f-5677-41cb-bfe0-198e68810805/?prof=required

- アルジュンポーデル


VC# Expressこのプロパティは欠けていますが、探したい場所がわかっていればx86構成を作成できます。

それはステップの長いリストのように見えます、しかし一度あなたがこれらの事がどこにあるかを知っていればそれはずっと簡単です。持っているだけの人VC# Expressおそらくこれが役に立つでしょう。あなたが知ったらConfiguration Manager次回はもっと直感的になります。

1. VC#Express 2005で、に進みます。Tools -> Options

2. [オプション]ダイアログボックスの左下隅にある、というボックスにチェックを入れます。"Show all settings"

3.左側のツリービューで、を選択します。"Projects and Solutions"

4.右側のオプションで、というボックスにチェックを入れます。"Show advanced build configuraions."

5.クリックOK

6.へBuild -> Configuration Manager...

7.プロジェクトの横にあるプラットフォーム列で、コンボボックスをクリックして選択します。"<New...>"

8.で"New platform" setting, choose "x86"

9.クリックOK

10.クリックClose

これで、x86構成になりました。やさしい! :-)

私も使うことをお勧めしますConfiguration ManagerAny CPUプラットフォームを削除します。 32ビットのネイティブDLLへの依存関係(間接的な依存関係でさえも)があるのであれば、それは望ましくありません。

スティーブン・スティルチャックXNA Game Studio開発者http://forums.xna.com/forums/p/4377/22601.aspx#22601



  • コンパイラターゲット(x86または64ビット)の変更に関する追加情報と詳細な説明をありがとう。 - Azim

3

問題のわずかに異なる状況に直面したときにこの質問を見つけ、それが将来他の苦しめられた魂に役立つかもしれないと考えたので、私は私が狙いを定めると思いました:

私はWindows Server 2008 64ビット上で実行されているIIS 7でホストされているASP.NETアプリケーションを持っていました。

IISはプロセスのビット数を制御しているので、私の場合の解決策はEnable32bitAppOnWin64設定をtrueに設定することでした。http://blogs.msdn.com/vijaysk/archive/2009/03/06/iis-7-tip-2-you-can-now-run-32-bit-and-64-bit-applications-on-the-same-server.aspx

IIS 6.0では、動作が多少異なります(アプリケーションプールレベルでEnable32bitAppOnWin64を設定することはできません)。http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/0aafb9a0-1b1c-4a39-ac9a-994adc902485.mspx?mfr=true


2

私は同じ問題を抱えています。私はwindows 7 64 bitにoffice 2010 64 bitをインストールしてから2007 Office System Driver:Data Connectivity Componentsをインストールしようとします。

その後、Visual Studio 2008はMS-Access 2007データベースファイルへの接続を開くことができます。


2

同様のStack Exchangeスレッドに関する私の投稿を参照してください。https://stackoverflow.com/a/21455677/1368849

私はこのPowerShellコードを実行することによって見つけた、12ではなくバージョン15をインストールしていました...

(New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION

...これは私にこの結果を与えました(私は簡潔のために他のデータソースを削除しました)...

SOURCES_NAME              SOURCES_DESCRIPTION                                                                       
------------              -------------------                                                                       
Microsoft.ACE.OLEDB.15.0  Microsoft Office 15.0 Access Database Engine OLE DB Provider


1

私は32ビットのみにコンパイルした.NETアプリケーションで完全に更新されたWindows Vista Family 64ビットで同じエラーを持っています - プログラムは64ビットマシンのprogramx86フォルダーにインストールされています。 2007アクセスデータベースプロバイダがインストールされていても、同じインストールの/ wiothout SP2、IISがインストールされていて、32ビットアプリケーションサポート用に設定されたアプリケーションプールでもこのエラーメッセージが表示されます。

JET4.0が64ビットマシンで失敗していたので、私は自分のアプリをACE OLE DB.12.0に切り替えました - そしてそれは良くありません: - /私が見つけた最も有望なスレッドはこれでした:

http://ellisweb.net/2010/01/connecting-to-excel-and-access-files-using-net-on-a-64-bit-server/

64ビットの「2010 Office System Driver Beta:データ接続コンポーネント」をインストールしようとすると、32ビットのOfficeアプリケーションをすべてアンインストールせずに64ビット版をインストールすることはできません。 Office System Driver Beta:そのページ(および他のユーザー)が推奨する "Microsoft.ACE.OLEDB.14.0"の代わりに "Microsoft.ACE.OLEDB.12.0"をプロバイダとして使用しても、Data Connectivity Componentsは最初の問題を解決しません。

私の次の試みはこの記事に従うことです。

この問題は、OLEDB32.DLLとOLEDB32r.DLLがサーバーに登録されているのが間違っているためです。 64ビットバージョンが登録されている場合は、それらを未登録にしてから32ビットバージョンを登録する必要があります。これを修正するには、%Program Files%/ Common Files / System / OLE DBにあるバージョンの登録を解除します。次に、同じパスにあるが%Program Files(x86)%ディレクトリにバージョンを登録します。

64ビットマシン上のJET 4.0プロバイダとOLEDB ACEプロバイダの両方でそれほど問題を抱えている人はいますか?他のどれも動作しない場合、誰かが解決策を見つけましたか?


  • ここには有用な情報がありますが、ご存じのとおり、この書き方はstackexchangeには適していません。これを片付けた(そしてまだ覚えているなら、おそらくあなたのために動いていたものを更新した)なら、これは問題に追加されるでしょう、特に現在12.0以降のバージョンへの参照が少ないので(そしてそれらを使うべきかどうか)ネットワークあるいは、少なくとも、私はそのアップデートをいただければ幸いです。 - CWilson

1

私はあなたが32ビットデータベースで64ビットシステムを実行していて、64ビットコンソールを実行しようとしているなら、以下のパッケージがマシンにインストールされる必要があると思います。

  1. Microsoft Accessデータベースエンジン2010 x86をインストールする 再配布可能、このインストールは次の場所にあります。http://www.microsoft.com/download/en/details.aspx?id=13255
  2. Office 2007のデータ接続コンポーネント、このインストールは で利用可能:http://www.microsoft.com/download/en/confirmation.aspx?id=23734
  3. Microsoft Accessデータベースエンジン2010 x 64再配布可能。あなたはするであろう パッケージをローカルにダウンロードし、パッシブフラグを付けて実行する必要があります。 こちらからインストールをダウンロードできます。http://www.microsoft.com/en-us/download/details.aspx?id=13255'/ passive'フラグ付きのコマンドプロンプトを使用してインストールします。の中に コマンドプロンプトで次のコマンドを実行します。 'AccessDatabaseEngine_x64.exe / passive'

注:順序は重要と思われます - すでに何かインストールされている場合は、アンインストールして上記のステップに従ってください。

リンクされた質問


関連する質問

最近の質問