none
VC8 x64でAccess(mdb)ファイルを参照する方法 RRS feed

  • 質問

  • 表題の件、VC8で Native x64環境(MFC)で、mdbファイルを操作する方法を探しております。
    x86では問題無く参照可能なのですが、x64では以下手段を試してみたものの
    アクセス出来ずに難儀しております。

    ・DAOを使用する方法(CDaoDatabase,CDaoRecordset,CDao・・・)
      ⇒x86では動作するが、x64では使用不可(ビルドエラー)
      #error DAO Database classes are not supported for Win64 platforms.

    ・ADO (ODBC)
      ⇒x86では、[Provider=Microsoft.Jet.OLEDB.4.0]で動作するが、
        x64では"プロバイダが見つかりません。"でエラーとなる。

      x64で動作するmdb用ODBC Driverを探しているのですが、見つからず。
      US Forumsで「Jet」はx64へは対応しないとの情報も・・・
        http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=85703&SiteID=1

    CDaoDatabaseのx64対応版みたいな機能は、用意されていないのでしょうか?
    (.Net Frameworkコンポネントを使用しない方向で)

    2006年8月11日 6:21

回答

  • DAOやCDaoDatabaseやADOやOLE DB等は,
    Jetデータベースエンジン自体のラッパーに過ぎないので,
    つまり,例えば,
    Recordsetのオブジェクトには,レコードの集まりの実態が入っているわけでなく
    概念としてRecordsetとしてくくった,
    それ絡みのメソッドの呼び出しの代行をしているだけです。
    (OLE DBやそれをラップしたADOは,Jet OLEDBプロバイダへの
    OLE DB仕様のインターフェイス経由でのメソッドの呼び出しをラップしたもの。
    Jet OLEDBプロバイダ は,Jetデータベースエンジンを
    OLE DB仕様で公開するためのプロバイダで,
    これも代理人みたいなものです)

    なので,要するにみな仲介者にすぎないので,
    Jetデータベースエンジン自体(msjet40.dll)がx64対応にならない限り無理でしょうね。

     

    Access 2007 で,
    Jetデータベースエンジンに対して後方互換になる
    ACEデータベースエンジンと呼ばれる予定のものが登場しますが,
    それは,従来のJetデータベースエンジンに加え,
    Windows SharePoint Service 対応を強化したもので,
    それは,きっとx64対応となるようになると思いますが,
    Access 2007 や Excel 2007 のような Office 2007 を
    インストールして初めて手に入るもので,
    今までの Jet とは微妙に状況が異なります。


    Jetデータベースエンジンは,SQL Serverのようにサービスでなく,
    アプリケーションのプロセス内で動くふつうのDLLになっています。

    で,
    SQL Server もサービスでなくDLL版の計画があって,
    SQL Server Everywhere (SSEv) というものがあります。
    基本的には,mdbファイルのテーブルオブジェクトだけのようなもので,
    かつ,ユーザーレベルセキュリティを設定しないで使っている感じのもので,
    シングルユーザー & DLL として動きます。

    Jetからの移行で注意する点としては,
    SSEv が使用するデータファイルは,
    .sdf という拡張子のファイルになっているんですが,
    .mdbと違って,開かれる時は,常に排他になります。
    なので,共有フォルダで,ファイルを共有するようなことはできません。
    ただ,もともと,.mdbファイルも共有フォルダで共有して同時に使うのは,
    いちじるしく信頼性が下がるので,
    共有したい場合は,SQL Server Express 等にするとかです。

    2006年8月11日 10:56

すべての返信

  • DAOやCDaoDatabaseやADOやOLE DB等は,
    Jetデータベースエンジン自体のラッパーに過ぎないので,
    つまり,例えば,
    Recordsetのオブジェクトには,レコードの集まりの実態が入っているわけでなく
    概念としてRecordsetとしてくくった,
    それ絡みのメソッドの呼び出しの代行をしているだけです。
    (OLE DBやそれをラップしたADOは,Jet OLEDBプロバイダへの
    OLE DB仕様のインターフェイス経由でのメソッドの呼び出しをラップしたもの。
    Jet OLEDBプロバイダ は,Jetデータベースエンジンを
    OLE DB仕様で公開するためのプロバイダで,
    これも代理人みたいなものです)

    なので,要するにみな仲介者にすぎないので,
    Jetデータベースエンジン自体(msjet40.dll)がx64対応にならない限り無理でしょうね。

     

    Access 2007 で,
    Jetデータベースエンジンに対して後方互換になる
    ACEデータベースエンジンと呼ばれる予定のものが登場しますが,
    それは,従来のJetデータベースエンジンに加え,
    Windows SharePoint Service 対応を強化したもので,
    それは,きっとx64対応となるようになると思いますが,
    Access 2007 や Excel 2007 のような Office 2007 を
    インストールして初めて手に入るもので,
    今までの Jet とは微妙に状況が異なります。


    Jetデータベースエンジンは,SQL Serverのようにサービスでなく,
    アプリケーションのプロセス内で動くふつうのDLLになっています。

    で,
    SQL Server もサービスでなくDLL版の計画があって,
    SQL Server Everywhere (SSEv) というものがあります。
    基本的には,mdbファイルのテーブルオブジェクトだけのようなもので,
    かつ,ユーザーレベルセキュリティを設定しないで使っている感じのもので,
    シングルユーザー & DLL として動きます。

    Jetからの移行で注意する点としては,
    SSEv が使用するデータファイルは,
    .sdf という拡張子のファイルになっているんですが,
    .mdbと違って,開かれる時は,常に排他になります。
    なので,共有フォルダで,ファイルを共有するようなことはできません。
    ただ,もともと,.mdbファイルも共有フォルダで共有して同時に使うのは,
    いちじるしく信頼性が下がるので,
    共有したい場合は,SQL Server Express 等にするとかです。

    2006年8月11日 10:56
  • あくまで予想ですが。。CDaoDatabase関連のクラスは、次のVisual Studioでは無くなりそうな気がします。
    2006年8月11日 15:02
  •  scapegoats さんからの引用
    x64では"プロバイダが見つかりません。"でエラーとなる。

    よく読んだら,リンク先の話は,
    x86向けのアプリもx64上で動くので
    ターゲットをx86でコンパイルしてごまかす...
    っていう話なような気がします。
    2003ならできるって話じゃないような。

    # 書き直しました。

    2006年8月12日 10:12
  • 便乗質問です。

    VC6からVS2005環境への移行を行っているのですが、

    CDaoDatabaseクラスで行う処理(mdbへのアクセス等)をx64環境で実装するには

    .Net Framework(Ver2.0以降?)を用いれば可能なのでしょうか?

    これまで、.Net Frameworkを用いた実装をしたことが無いので、検索してもいまいち

    確信が持てません。

    ご教授頂ければ幸いです。

    2007年1月29日 15:07