
さて、これは私が初めてこれを扱うものなので、少しわかりにくかったり曖昧だったりしてもお許しください。
私は、Hyper-v なしの Windows Server 2008 Standard (6.0、ビルド 6002) を搭載したサーバーを持っています。このサーバーから小さな Web サイトを運営しており、Web サイトから入ってくる情報を Microsoft Access データベースに保存しています。ODBC 接続を開くために作成した PHP は、ラップトップのテスト環境でこの Web サイトを作成したときに正常に動作したため、正しいものであると確信しています。
現在発生している問題は、2 つの異なる odbcad32.exe があるようですが、1 つには .accdb ファイル用のドライバーがなく、.mdb ファイル用のドライバーしかないようです。もう 1 つには、両方のドライバーがあります。
私が言及する最初のものには、「Driver do Microsoft Access (.mdb)」というタイトルのドライバーがあり、2 つ目のものには、「Microsoft Access Driver (.mdb, .accdb)」というタイトルのドライバーがあります。最初の odbcad32.exe にアクセスするには、C:\Windows\SysWOW64\odbcad32.exe に移動し、必要なドライバーがあると思われるものにアクセスするには、コントロール パネル -> 管理ツール -> データ ソース (ODBC) に移動し、システム DNS タブで新しい接続を作成します。
コントロールパネルからアクセスするファイルに変更を加えても、変化は見られませんが、SysWOW64 で odbcad32.exe ファイルを使用すると、返されるエラーに変化が見られます。私が気づいた主な違いは、コントロールパネルの方法で ODBC 接続をセットアップすると、ODBC 接続が見つからないというメッセージが表示されるのに対し、SysWOW64 で .mdb 接続を作成した (.accdb ファイルを指すようにした) 場合は、次のように表示されることです。
Cannot open database '(unknown)'. It may not be a database that your application recognizes, or the file may be corrupt.
つまり、SySWOW64 の odbcad32.exe バージョンが「正しい」バージョンとして認識されているようです。これを修正する方法はありますか?
できる限り詳しく説明しようとしましたが、わかりにくい点や抜けている点がありましたらお知らせください。
答え1
system32 の実行可能ファイルは 64 ビット バージョンですが、syswow64 のコピーは 64 ビット バージョンです。それぞれは、実行している実行可能ファイルのアーキテクチャに基づいて、異なるドライバー セットで動作します。
実行するバージョンは、ドライバーをロードする必要がある実行可能ファイルのアーキテクチャによって異なります。
ほとんどの場合、PHP は CGI の 32 ビット プロセスとして実行されますが、環境を再確認し、適切なドライバーがインストールされていることを確認する必要があります。