前提・実現したいこと
.NETのWindowsアプリからアクセスファイル(.accdb)接続時(ACE.OLEDB.12.0)に
不定期で接続エラーが発生するので、このエラーを解消したいです。
発生している問題・エラーメッセージ
エラーメッセージ |
---|
"DBConnectErrSystem.Data.OleDb.OleDbException (0x80004005): エラーを特定できません |
場所 System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) |
場所 System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) |
場所 System.Data.ProviderBase.DbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) |
場所 System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions) |
場所 System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) |
場所 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) |
場所 System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) |
場所 System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) |
場所 System.Data.OleDb.OleDbConnection.Open() |
場所 Common.MDB.ConnectsMDB(Boolean blnCOMPACT_MDB)" |
-------------------------------------------------------------------------------------------------- |
該当のソースコード
Visual
1'@****************************************************************************** 2'@ 名 称: ConnectsMDB 3'@ 機 能: MDBコネクト 4'@ 備 考: 5'@****************************************************************************** 6Public Function ConnectsMDB(Optional ByVal blnCOMPACT_MDB As Boolean = True) As Boolean 7 Dim loop1 As Short 8 9 ConnectsMDB = False 10 11 DICApp.DICAppCommon.CommonFunctions.LoadResouce() 12 13 For loop1 = 0 To 9 14 pCanQuery(loop1) = False 15 intCurrentRow(loop1) = 0 16 Next 17 18 If pConnected Then 19 'エラーメッセージ出力 20 Call ShowMDBError("DBConnectErr") 21 Exit Function 22 End If 23 24 If pPath = "" Then 25 'エラーメッセージ出力 26 Call ShowMDBError("DBPathErr") 27 Exit Function 28 End If 29 30 Dim stDiryName As String = System.IO.Path.GetDirectoryName(pPath) 31 Dim stFileName As String = System.IO.Path.GetFileName(pPath) 32 If Not stDiryName.Trim.Substring(stDiryName.Trim.Length - 1) = "\" Then 33 stDiryName += "\" 34 End If 35 36 ' MDBの最適化 37 If blnCOMPACT_MDB = True Then 38 If MDB.glbCOMPACT_MDB(stDiryName, stFileName) = False Then 39 'エラーメッセージ出力 40 Call ShowMDBError("DB_COMPACT_Err") 41 'Return Falseしない 42 End If 43 End If 44 45 pMyDb = New OleDb.OleDbConnection 46 47 pMyDb.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & 48 "Data Source=" & pPath & ";" & 49 "Persist Security Info=False" 50 51 Try 52 pMyDb.Open() 'MDBのオープン 53 'トランザクション開始 54 If Not BeginsTransMDB() Then 55 Exit Function 56 End If 57 Catch ex As Exception 58 'エラーメッセージ出力 59 Call ShowMDBError("DBConnectErr" & ex.ToString) 60 Exit Function 61 End Try 62 63 dtSet.Clear() 64 65 pConnected = True 66 67 ConnectsMDB = True 68 69End Function
試したこと
上記ソースコードからMDBの最適化処理を削除して実施。
補足情報(FW/ツールのバージョンなど)
・OS:Windows10 Pro 64ビット版
・Access:Access 2016 32ビット版
・その他:Microsoft Access database engine 2010(Japanese) 32ビット版(※1)
(※1)Visual Basic 2017のターゲットCPUの設定がx86なので64ビット版では動かない。
あなたの回答
tips
プレビュー