2009年11月21日土曜日

Windows7で問題発生。64bit SQL-Server 2008 Expressで、Excelワークシートが読み込めない・・・


マイクロソフトが誇るフリーのデータベースソフト「SQL-Server 2008 Express」ですが、私もいよいよその64bit版を、Windows7の64bit版の上で使用開始いたしました。

しかし、早くも一つ問題が発生してしまいました。
SQL-Server 2008 Expressのデータベースのテーブルにデータを格納する時、私は、Excelから読み込んで一気に格納するのが便利なので多用しているのですが、それが動かないのです。

SQL-Serverには、OpenRowSet()関数によって、Excelのワークシートをまるでデータベースのテーブルと同じ感覚で利用可能である、という、とんでもなく便利な機能が備わっています。

SELECT M.* FROM OpenRowSet(
'MICROSOFT.JET.OLEDB.4.0',
'Excel 8.0;DATABASE=ワークシート名;HDR=YES;IMEX=1;',
'SELECT * FROM [シート名$];') AS M;

という感じで使うのですが、Excelワークシートを読み込む時に使う「MICROSOFT.JET.OLEDB.4.0」というプロパイダがどうも64bitには対応してないみたいです。
ネットを必死に調べても、分かりませんでした。

自分の環境で言えば、自作デスクトップパソコンの32bit Windows XPと、32bit SQL-Server 2008 Expressの組み合わせの方であれば、基本の設定さえしっかりしてあげておけば、特に問題なくスルッと使えているのです。
だから、まさか使えないとは思わなくって、かなり焦ってしまいました。

やっぱり64bitだとだめなのかなぁ・・・。
仕事が夜中までかかり、遅くに帰宅してからこの件でウンウン悩んだので、気がつくと徹夜してました。
連休の初日は、こうして一日中眠たいままで、連れにあちこち付き合う羽目になっちゃいました・・・。
それはともかく、この問題どうしよう・・・。

しかし、要するに、私が何をやりたいかと言えば、Excelのワークシートを読み込んで、データベースに格納できれば良いのです。
そこを突いて考えれば、別な手段で解決できるんじゃないかと。

かなり強引で、あまり参考にならないかも知れませんが、64bit Windows7でExcelワークシートをデータベーステーブルとして読み込む方法を思いつきました

長くなって来たので、それは次回の記事で書かせていただきます。