こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Win7 64bit:ODBC経由でMDB接続不可

こんにちは

PHPからODBC経由で.mdbファイルを操作しようとして躓いています。
OSはWindows 7 64bitで、インストールしているMS Officeは32ビット (Office 2007)ですが、MS Accessはインストールしていません(先日、MS Accessを含むOffice 最新版の試用版をインストールしたのち削除しました)。

「C:\Windows\SysWOW64」以下の「odbcad32.exe」を管理者権限で開いてシステムDSNにドライバを設定してPHPから接続を試みたのですが、エラー「IM014」が返ってきました。調べると「指定されたDNSには、ドライバーとアプリケーションとのアーキテクチャの不一致が含まれています」ということだそうです。

「C:\Windows\System32」以下の「odbcad32.exe」でドライバを設定すればよいのかと思いましたが、管理者権限で開いても指定可能なドライバが表示されません。

どういった設定をすべきでしょうか?

投稿日時 - 2014-07-08 13:36:31

QNo.8669802

すぐに回答ほしいです

質問者が選んだベストアンサー

PHP_INT_SIZE で32bit版か64bit版かはわかりません。
http://www.php.net/manual/ja/language.types.integer.php

一般に、64bitOSにPHPの32bit版は入らないはず。
古いバージョンでは入りますが、最新版はダメです。
タスクマネージャでphp.exeを見て*がなければ64bitです。

大原則として、64bitプロセス空間には64bitのDLLしか
ロードできません。同じく32bitプロセスには32bitのDLL
しかロードできません。ODBCがDLL実装(これが大半)で
あれば32bit版のODBCを64bitPHPで扱うことはできません。

プロセス間通信を使って、異なるプロセスでODBCを稼動
させ、データを通信により受け渡します。プロセスが違う
ので、64bit/32bitの壁をスルーできます。但し、これを実装
するには独自にPHPエクステンションを作るか、exe型の
COMモデルを使うしかないと思います。

私は前者は開発した経験がありますが、後者は経験が
ありません。PHPエクステンションの開発は非常に難しく、
Windowsのプロセスにやスレッドに関する技術、PHPの
データ管理法、DLLとのインターフェースなどの知識が
無いと作れません。
また、exe型のCOMモデルは非常に少なく、Office系での
実装しか見たことがありません。

Accessがインストールされていれば、とりあえず、COM
オブジェクトでAccess.Applicationをインスタンス化して
操作を試みます。成功すれば何とかなると思います。
PHPとCOMでググってみてください。

投稿日時 - 2014-07-08 21:21:48

お礼

ありがとうございます。
ACCESSはインストールされていないんです。
むしろ、購入してACCESSでアプリケーションを作っちゃった方が楽な気もしてきます。

別の方法を検討します。

投稿日時 - 2014-07-09 17:30:00

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

PHPの32ビット版って最新版だとインストールできないんですか?
ググってみたけど、それらしい情報が無かったけど…

PHPを32ビットにできないなら、Accessをやめた方が良いかも。
もともと、Accessってあんまり信頼性は高くないし。
PostgreSQLあたりがライセンスフリーで良いかと。64ビット版ももちろんあるし。

投稿日時 - 2014-07-09 14:08:38

お礼

面倒なところに手を出してしまった感じです。
今までPHPとMySQLでいろいろ作っていたのでMDBファイルだろうが大差ないだろうと甘く見ていました。
もともと業務用で使う社内ツールなのであんまりリソースも割けません。現在、ExcelのVBAで操作できるコードを書いてみたところ、意外に行けそうなのでこちらの方面を検討してみます。VBAは得意ではないですが、頑張ります。

投稿日時 - 2014-07-09 17:32:00

ANo.1

PHPが64ビット版で、ODBCドライバが32ビット版って感じなんでしょうね。
PHPを32ビット版に変えるか、ODBCドライバの64ビット版を入手するか、どちらかですね。
MDBの64ビット版ドライバってのは探してみたけど、無さそうな感じ。
32ビット版のPHPを使うしかないかな。

投稿日時 - 2014-07-08 14:08:07

お礼

ありがとうございます。
PHPのバージョンを調べたところ、32ビットのようです。。。
「echo PHP_INT_SIZE;」で4が表示されました。。

投稿日時 - 2014-07-08 15:01:51

あなたにオススメの質問