Windows7 64ビットでAccess2010 32ビットがインストールされているとエラーが出る

はじめまして。よろしくお願い致します。

 

Windows7 64ビットでAccess2010 32ビットがインストールされた状態でaccdbファイルに接続しようとすると

下記のエラーが出ます。

 

 

32ビットのAccessをアンインストールし、同一端末で64ビットのAccessをインストールすると問題なく接続が出来ます。

 

ACCESSは起動し、該当ファイルは64ビット・32ビットどちらも問題なく開けます。

accdbは32ビット版(XP)で作成したものです。


何か設定をすればいけるのか、そもそも32ビット版だと出来ないのかご教授

頂けると大変ありがたいです。

 

開発環境は、Visual Studio 2005 C#.net (Frameworkは3.5)となります。

該当のソースコードも以下に記載させて頂きます。

 

下記ソースコードの、

//DB接続
    this.dbc.Open();

の部分でエラーが発生しております。

 

 

 

 

 

 

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.OleDb;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Diagnostics;
using System.IO;


namespace patrusts
{
    public class DBAccess
    {
        #region フィールド変数

        // DB接続パラメータ設定
        private static String strDBConnection;

        // DBコネクション定義.作成
        private OleDbConnection dbc;

        // トランザクション定義
        private OleDbTransaction dt;

        // DBコマンド定義
        private OleDbCommand cmd;

        // データ・リーダー定義
        private static OleDbDataReader dr;

        private static DataTable dataTable1;

        private static DateTime d;
        //private static log_file log = new log_file();

        private static String DB_SAVE = Utility.DB_save;
        private static String DB_NAME = Utility.DB_name;

 

        #endregion


        #region プロパーティ
        public OleDbConnection DBCon
        {
            get
            {
                return this.dbc;
            }
        }
        #endregion

        #region メソッド

        /// <summary>
        /// Instance時にDB情報設定
        /// </summary>
        public DBAccess()
        {
            try
            {
                String DB_PASS = Utility.DB_pass;

                if (DB_PASS == null || DB_PASS.Equals(""))
                {
                    DB_PASS = "\"\"";
                }

                StringBuilder sb = new StringBuilder();
                /* 古いVer
                sb.Append("Provider=Microsoft.Jet.OLEDB.4.0");
                sb.Append(";Data Source=patrusts.mdb");
                sb.Append(";Password=\"" + Utility.DB_pass + "\"");
                */

                sb.Append("Provider=Microsoft.ACE.OLEDB.12.0");
                sb.Append(";Data Source=" + Utility.DB_save + Utility.DB_name);
                sb.Append(";Jet OLEDB:Database Password=" + DB_PASS);
                sb.Append(";User ID=Admin");

                strDBConnection = sb.ToString();

                Console.WriteLine("\n\nDB接続 -> ");
                Console.WriteLine(strDBConnection.ToString());

                this.DBConnect();
            }
            catch (Exception ex)
            {
                MessageBox.Show("DB情報設定に失敗しました。");
                Utility.log.err_log("[DBAccess]Exception Err : " + ex.ToString());
            }
        }

        /// <summary>
        /// DB接続
        /// </summary>
        /// <returns>Connection</returns>
        private void DBConnect()
        {
            try
            {
                this.dbc = new OleDbConnection(strDBConnection);
            }
            catch (OleDbException ex)
            {
                MessageBox.Show("DB接続エラーです。");
                Utility.log.err_log("[DBConnect]OleDBException : " + ex.ToString());
            }
            catch (Exception  ex)
            {
                Utility.log.err_log("[DBConnect]Exception Err : " + ex.ToString());
            }
        }

        /// <summary>
        /// DBステータス確認
        /// </summary>
        /// <returns>接続:TRUE,失敗:FALSE</returns>
        public Boolean DBOpen()
        {
            Boolean result = false;
            try
            {
                if (dbc.State.Equals(ConnectionState.Closed))
                {
                    //DB接続
                    this.dbc.Open();
                    result = true;
                }
                else if (dbc.State.Equals(ConnectionState.Open))
                {
                    result = true;
                }
            }
            catch (OleDbException ex)
            {
                result = false;
                MessageBox.Show("DB接続エラーです。");
                Utility.log.err_log("[DBOpen]OleDBException : " + ex.ToString());
                d = DateTime.Now;

            }
            catch (Exception ex)
            {
                result = false;
                MessageBox.Show("DB接続エラーです。");
                Utility.log.err_log("[DBOpen]Exception Err : " + ex.ToString());
                d = DateTime.Now;
            }

            return result;
        }

        /// <summary>
        /// DB切断
        /// </summary>
        /// <returns></returns>
        public Boolean DBClose()
        {
            Boolean result = false;
            try
            {
                dbc.Close();
            }
            catch (Exception ex)
            {
                Utility.log.err_log("[DBClose]Exception Err : " + ex.ToString());
                d = DateTime.Now;
            }
            return result;
        }

 


        #endregion


        /// <summary>
        /// Login用 レコードがあるかないかの判断のみ
        /// 返り値[int型:(0.無 1.有 2.dbcの設定エラー)]
        /// </summary>
        /// <param name="sql_query">String型:SELECT文SQL</param>
        /// <returns>int型:(0.無 1.有 2.dbcの設定エラー)</returns>
        public int LoginQuery(string sql_query)
        {

            int res = 0;

            if (dbc == null)
            {
                res = 2;
            }
            else
            {

                cmd = new OleDbCommand();
                cmd.Connection = dbc;
                cmd.CommandText = sql_query;
                cmd.CommandType = CommandType.Text;

                // DB接続
                // DBコネクションを開く
                if (DBOpen())
                {
                    try
                    {

                        //int m = (int)cmd.ExecuteScalar();
                        dr = cmd.ExecuteReader(CommandBehavior.Default);   //SingleResult

                        if (dr.HasRows == true)
                        {
                            res = 1;
                        }

                        dr.Close();
                    }
                    catch (OleDbException e)
                    {
                        MessageBox.Show("OleDbException:" + e.ToString());
                        d = DateTime.Now;
                        Utility.log.err_log("[LoginQuery]OleDbException: " + e.ToString());


                    }
                    catch (InvalidOperationException e)
                    {
                        MessageBox.Show("InvalidOperationException:" + e.ToString());
                        d = DateTime.Now;
                        Utility.log.err_log("[LoginQuery]InvalidOperationException: " + e.ToString());

                    }
                    finally
                    {
                        cmd.Dispose();
                        // DBコネクションを閉じる
                        dbc.Close();
                    }
                }
            }
            return res;
        }

 

        }

    }
}

 

 

よろしくお願い致します。

 

 

 

回答
回答

MukkuMukuです


コードは読みませんのでちょっと置いています。

組み合わせ動作検証の結果からすると、AnyCPUでビルドされているなどで、32bitのドライバが使用できない状態にあるのかなと思ってます。

x86でビルドした場合どうなりますでしょうか。

この返信が役に立ちましたか?

役に立ちませんでした。

素晴らしい!フィードバックをありがとうございました。

この返信の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。今後のサイト改善に役立てて参ります。

この返信の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。

 
 

質問情報


最終更新日 2021年1月29日 表示 770 適用先: