SecondaryUse開発日記

データベース参照ツールを開発しています。そのツールの開発、利用方法秘話などなどの紹介

microsoft.jet.oledb.4.0 vs microsoft.ace.oledb.12.0

新しい環境で動かすために四苦八苦しています

旧環境
Microsoft Access データベース エンジン 2010
Microsoft Access Runtime 2010

新環境
Microsoft Access データベース エンジン 2016
Microsoft Access Runtime 2016

ターゲットのファイルは  XXXX.mdb  です

 

今までは、microsoft.ace.oledb.12.0 で接続し問題なく使ってました

新環境では、 

microsoft.ace.oledb.12.0 のとき 'Microsoft.ACE.OLEDB.12.0' プロバイダーはローカルのコンピューターに登録されていません。

microsoft.ace.oledb.16.0 のとき 0X80004005 が発生

前のバージョンのアプリで作成されたデータベースは開けないとの事

 f:id:syskobo:20211118183355j:plain

microsoft.jet.oledb.4.0  のとき 一応接続可能 しかし... 

 

解決案

1)新環境に Microsoft Access Runtime 2010 をインストールする
 インストールすれば microsoft.ace.oledb.12.0 が利用できるのを確認してます

 他のアプリケーションへの影響がわからないので保留中 

 

2)microsoft.jet.oledb.4.0 を使用する

  jet に変えて動作したところ 動いてくれない

 f:id:syskobo:20211118184626j:plain

  microsoft.ace.oledb.12.0 のときは 取得できる

 f:id:syskobo:20211118184739j:plain

 where句のカラムのデータはまちまちです

  f:id:syskobo:20211118184444j:plain

 jet で「where staffcode like '00001%'」にしたときは取得可能です
これだけなら jet に変えてもいいが 他にも SQL があり そちらを jet で動かすための SQL に変えるのは厄介です

ace と jet とでは 同じSQL でも 結果が異なることを知りました

connect時の文字列で ace と同じにするオプション知りませんか?