QA@IT

VB.NET 32/64bit mdb接続+Excel操作

5809 PV

VB.NETでmdbに接続してExcelに書き出しているのですが
Win7の32/64bit対応は可能なのでしょうか?

ターゲットCPU:AnyCPU
 msjet40.dllの関係で64bitOSがエラー。

ターゲットCPU:x86
 エクセルが開けないので64bitOSがエラー。

上記のようになってしまうので、
最悪はx86でコンパイルしたexeでmdbに接続してテキストデータを落とし、
エクセル処理を行う部分をAnyCPUでコンパイルしたexeをキックして処理とかいう
なんか無駄の多そうな対処をしようと思うのですが・・・何か対処のしようはございますでしょうか?

■mdb接続

'初期化
prConn = New OleDbConnection
prComm = New OleDbCommand
'接続情報
prConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                          "Data Source=" & Quote & "mdbパス" & Quote & ";"
prComm = prConn.CreateCommand
prConn.Open()

■エクセル

prXlsApp = New Excel.Application
prXlsBook = prXlsApp.Workbooks.Open("エクセルパス")

回答

環境はしっかり書いてください。それぐらいこの問題には重要な話です。
組み合わせによってまったく異なります。

OSが32bitか64bitか、.NETアプリケーションのTargetCPUに加え、Officeが32bitか64bitかも大事になるはずです。

まずAnyCPUでのコンパイルは今は推奨されていません
.NET 3.5だとAnyCPUが初期設定ですが、現在はきちんと指定することが推奨されてます。
ってこの間、MSのドキュメントで見かけてがっかりした記憶があります。
なお、AnyCPUでOSが64bitなら64bitで起動したと思っていいでしょう。確認方法もありますが割愛。32bit用のCOM用インターフェースのアセンブリ(Interop)はこの時点で使えなくなります。

細かく検証したわけではないですけど、
OSはどっちでもいいので
Officeが32bitで、.NETがx86でコンパイルされてればうまくいくような気がしています。

Jetは64bitドライバはありませんが32bitドライバは依然存在すると思いました。
32bitドライバを利用するなら32bitプロセスで起動すればよくx86ビルドですね。

VBA(特にCreateObject)なんかを使いたい場合はOfficeはまだ32bitしかないんだろうなと個人的に思ってます(古いかな。とりあえずVSOTは・・・聞こえません)。

とりあえず.NETとOfficeを32bit向けに用意して(OSは64bitでもいいです)、動作するか確認されてみるのが良いかと思います。
前述の通り、個人的な見解です。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。