2014年5月2日金曜日

64bit環境から32bitのODBC環境を呼び出そうとしてはまったお話

開発環境 WINDOWS7 Ultimate
eclipce pleiades
OFICE 2007
データベースをがっちり構築してツールを作るのではなくて
ACCESS のMDBをODBCでつつくぐらいで小回りのきくツールを作りたかったので
64bit環境下からODBCでACCESS_DBに接続しようとして却ってはまったの続き

さて、ODBC接続も作ったし、
String odbc_name = "ODBCの名前";
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection("jdbc:odbc:" + odbc_name,"","");
で繋がるかな~って実行してみたら…
これまたエラーで動かない…orz

これもあれこれ見てみると、
javaも64bitから呼び出すのは64bitのODBCなので、
32bitのODBCなんか知ったこっちゃないわよ 的なことのようだ
で、解決方法
eclipseに32bit用のjreを設定してやって、
プロジェクトも32bitで作るのが解決方法です

なんのこっちゃ、って感じですが、
まずは、32bitのjreをeclipceに設定してあげます

ウィンドウ(英語版だとwindow)から設定(英語版だとpreferences)を選びます


で、Javaの中にあるインストール済みのJRE(英語版だとInstalled JREs)を選択して 追加
 
 
 

標準VM(英語版だとStandarad VM)を選択してNEXT
 


JREホームは、32bitのJREはC:\Program Files (x86)\Javaの中にあるのでこれを選択
※私はjre7を落としていたのでこのフォルダを選択
 もしもなかったら、ORACLEのページからX86の方をダウンロードしてインストールしましょう
JRE名は何でも良いけど判り易くjre_32bitにしておきました。
 



続いて、プロジェクトの実行環境を32bitにします。

プロジェクトを右クリックして、設定(英語版だとproperties)
 

 

実行/デバッグ環境(英語版だとRun/debug settings)
対象のプロジェクトを選んで編集(Edit)

 JREタブから代替 JRE(英語版だとAltemate JRE)を選択
すると、先ほどインストールした32bitのJREが選択できるようになるので、選択⇒OK
 


これで、無事に32bitのデータベースにODBC接続できました\(^o^)/
まとめ
1.64bit環境で仕込んだeclipceで32bitのデータベースに接続するなら、
  32bitのJREがeclipceにインストールされている必要がある。
2.プロジェクトの実行環境を1でインストールした32bitのJREにしてやる必要がある。
ということのようです。

しかし、小回り利かせようと思って、お手軽にしようとした結果、
却って時間がかかる羽目に・・・orz

まあ、でも、いちいちデータベースの準備しなくても、
作ったjavaの実行環境とMDB準備して、
ODBC接続設定してやれば動くし…
データベースもACCESSで直接見ようと思えば手軽に見れるし…
ACCESS入ってなくてもランタイムで動作可能な仕掛けができるということで…
ゴニョゴニョ…と自分で言訳してみる。

でも、あれ?
これって、64bitのデータベース使った仕掛けとくっつけようとすると、
また一苦労するんじゃないか?
とりあえず目を背けるか…

64bitの世界と32bitの世界の並行稼働の間はこの辺、
苦労しかしない予感がするんだよなぁ

でも、
http://office.microsoft.com/ja-jp/word-help/HA010369476.aspx
によると

既定では、コンピューターで 64 ビット版の Windows を実行している場合でも、Microsoft Office 2010 では 32 ビット版の Office 2010 がインストールされます。
 重要   32 ビット版の Office 2010 は、ほとんどの人に推奨されるオプションです。これは、他の 32 ビット アプリケーション (特に 32 ビット オペレーティング システムでのみ使用できるサード パーティ製アドイン) の潜在的な互換性に関する問題を回避できるためです。


ということで、Officeは当面32bit使ってねってことなんですよね。
まあ、32bit時代の資産が軒並み使えなくなるってのもあれだしね…
でも、これって、64bit普及しないんじゃぁないだろうか…

将来的に新しいOSでは32bitのアプリは動きませんって言った時に
パニック起こしそう…

64bit環境でACCESSデータベースにODBC接続しようとしてはまったお話

仕事でJAVA PGをしててはまったのでメモ
開発環境 WINDOWS7 Ultimate
eclipce pleiades
OFICE 2007
データベースをがっちり構築してツールを作るのではなくて
ACCESS のMDBをODBCでつつくぐらいで小回りのきくツールを作りたかったので
64bit環境下からODBCでACCESS_DBに接続しようとして却ってはまった・・・

64bit環境だと普通にコントロールパネル→管理ツール→データソース(ODBC)で
ACCESSデータベースにODBC接続しようとすると、
ACCESSデータ接続のためのドライバーがなくて、はまります。

普通にコントロールパネルから


データソース(ODBC)を選んで


ODBC接続を追加してやろうとすると
 


ACCESSデータベース用のドライバがなくて新規に作れない(T_T)ということになります。
 
 


原因は、ACCESSが32bitで動いているので、64bitの設定からは機能しないということらしいです。
で、マイクロソフトのサポートページ
http://support.microsoft.com/kb/942976/ja
を見てみると,
余計に混乱したorz
難解な日本語を超訳すると、
 
32bitで使いたきゃ32bit用にODBC接続設定しなさい
設定は普通に呼んでも出てこないから、直接呼び出せや
って言っているようだ・・・
で、その直接呼び出すにしてもどこにいっらっしゃるのかしら?
って悩んでいたところ、
C:WINDOWSの中に
SysWOW64っていうそれっぽいものがいた。


ので、眺めてみるとodbcad32.exeってこれ又それっぽいのがいた
 


開けてみると
 


今度は普通にACCESSの接続用ドライバが居た\(-o-)/
 

 

無事に適当なデータソース名を付けて、
目的のACCESS_MDBを選択して完了


ということで、64bit環境のWINDOUSでACCESSデータベースに
ODBC接続したければ、
C:\Windows\SysWOW64\odbcad32.exe
を直接呼び出さなきゃだめよ。
という注意書き。

そしてこの後、このODBCをこれまた64bit 環境のeclipceから呼び出そうとして
はまるのでした・・・(T_T)

ACSESSデータベース使いたかったら
素直にACCESSでVB書けよって話なんですけど、
メインはORACLEにしておいて、
スタンドアローンでちょっとしたツールを作ったりとか、
小回り利かせたいって、思っちゃったのが罠でしたorz