質問

2つのプロジェクト(テスト用のWordテンプレートプロジェクトと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 = {<!> quot;「Microsoft.ACE.OLEDB.12.0」   プロバイダはに登録されていません   ローカルマシン。<!> quot;}

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

役に立ちましたか?

解決

Access 2007データベースを使用するVisual Studio 2008でVisual Basicプログラムを使用していますが、同じエラーを受け取りました。 64ビットシステムを実行している場合、プログラムのプロパティにある高度なコンパイル構成をx86に変更するように勧めるスレッドがいくつか見つかりました。これまでのところ、私は自分のプログラムに問題はありません。

他のヒント

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

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

2)IIS7マネージャーを開き、[アプリケーションプール]領域を開きます。右側のサイドバーに、<!> quot; Set application pool defaults <!> quot;というオプションが表示されます。それをクリックすると、ウィンドウがポップアップしてオプションが表示されます。

3)「32ビットアプリケーションを有効にする」という2番目のフィールドは、おそらくデフォルトでFALSEに設定されています。 「false」と表示されている場所をクリックして、「true」に変更します。

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

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

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


解決策:

それだけです!リンクしてくれたArjun Paudelに感謝します。 XNA Creator's Club Onlineにあるソリューションを次に示します。 Stephen Styrchakによるものです。

次のエラーは、64ビット用にコンパイルしていると思われることを示唆しています。

  

「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
-Arjun Paudel


VC# Expressには、このプロパティがありませんが、どこを見るか知っていればx86構成を作成できます。

ステップの長いリストのように見えますが、これらがどこにあるかがわかれば、はるかに簡単です。 Configuration Managerしか持っていない人なら、おそらくこれが便利だと思うでしょう。 Tools -> Optionsを知ったら、次回はずっと直感的になります。

1.VC#Express 2005では、"Show all settings"に移動します。
2. [オプション]ダイアログの左下隅で、"Projects and Solutions"
と書かれたボックスをオンにします。 3.左側のツリービューで、"Show advanced build configuraions."を選択します。
4.右側のオプションで、OK
というボックスをチェックします 5。Build -> Configuration Managerをクリックします。
6. "<New...>" ...
に移動します 7.プロジェクトの横のプラットフォーム列で、コンボボックスをクリックして、"New platform" setting, choose "x86"を選択します。
8. Close
9。<=>をクリックします。
10。<=>をクリックします。
これで、x86構成ができました!やさしい! :-)

<=>を使用してAny CPUプラットフォームを削除することもお勧めします。 32ビットのネイティブDLLに依存関係がある場合(間接的な依存関係も含む)は、これは本当に望ましくありません。

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


問題の少し異なるコンテキストに直面したときにこの質問を見つけて、将来的に他の苦しむ魂を助けるかもしれないと思ったので、私はチャイムだと思った:

Windows Server 2008 64ビットで実行されているIIS 7.0でホストされている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

同じ問題が発生しています。 Windows 7 64ビットにOffice 2010 64ビットをインストールしてから、2007 Office System Driver:Data Connectivity Componentsをインストールしようとしています。

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

同様のStack Exchangeスレッドでの私の投稿を参照 https://stackoverflow.com/a/21455677/1368849

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

(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

32ビットのみにコンパイルした.NETアプリケーションを含む完全に更新されたWindows Vistaファミリ64ビットでも同じエラーが発生します。プログラムは64ビットマシンのprogramx86フォルダーにインストールされます。 2007アクセスデータベースプロバイダーがインストールされていても、同じ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ビットをインストールしようとすると<!> quot; 2010 Office System Driver Beta:Data Connectivity Components <!> quot;すべての32ビットオフィスアプリケーションをアンインストールせずに64ビットバージョンをインストールできないこと、および2010 Office System Driver Betaの32ビットバージョンをインストールできないことを示しています。データ接続コンポーネントは、<! > quot; Microsoft.ACE.OLEDB.12.0 <!> quot; <!> quot; Microsoft.ACE.OLEDB.14.0 <!> quotの代わりにプロバイダーとして;そのページ(およびその他)が推奨するもの。

次の試みはこの投稿に従うことです。

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

64ビットマシンでJET4.0とOLEDB ACEプロバイダーの両方に問題を抱えている人はいますか?他のどれも機能しない場合、誰かが解決策を見つけましたか?

32ビットデータベースで64ビットシステムを実行していて、64ビットコンソールを実行しようとしている場合、次のパッケージをマシンにインストールする必要があると想定しています。

  1. Microsoft Access Database Engine 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 x64再頒布可能。あなたはするであろう パッケージをローカルでダウンロードし、パッシブフラグを指定して実行する必要があります。 こちらからインストールをダウンロードできます。 http://www.microsoft.com/en-us/download /details.aspx?id=13255 「/ passive」フラグを指定したコマンドプロンプトを使用してインストールします。の中に コマンドプロンプトで次のコマンドを実行します。 'AccessDatabaseEngine_x64.exe / passive'

注:順序は重要と思われるため、既に何かをインストールしている場合は、アンインストールして上記の手順に従ってください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top