タイトル | : Re: Access2007DBの最適化 |
記事No | : 6219 |
投稿日 | : 2007/09/03(Mon) 17:39 |
投稿者 | : 魔界の仮面弁士 |
現時点では、JRO は JET 4.0 以下にのみ対応しています。
一応、インターフェイスは継承されているため、 strS = "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;" _ & "Data Source=c:\db1.accdb" strT = "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;" _ & "Data Source=c:\db2.accdb;Jet OLEDB:Engine Type=5" のように指定すれば、Jro.CompactDatabase メソッドの最適化機能を呼び出せますが、 Access 2007 形式である『Jet OLEDB:Engine Type=6』の指定には対応していませんので、 実質上、使えないということになります。
ACE 12.0 形式(*.accdb) の最適化が必要な場合には、 案1) msaccess.exe の /compact パラメータを利用する。 案2) DAO 12.0 (ACEDAO.DLL) の DBEngine.CompactDatabase メソッドを利用する。 のいずれかで対応してみてください。
案1 は、Process.Start で対処できるでしょう。 案2 については、こんな感じで。
Imports Microsoft.Office.Interop.Access Imports System.Runtime.InteropServices '----- Dim srcFile As String = "C:\db1.accdb" Dim dstFile As String = "C:\db2.accdb"
Dim dbe As Dao._DBEngine = Nothing Try dbe = New Dao.DBEngineClass() dbe.CompactDatabase(srcFile, dstFile, _ Dao.LanguageConstants.dbLangJapanese, _ Dao.DatabaseTypeEnum.dbVersion120) MsgBox("最適化完了", MsgBoxStyle.Information) Catch ex As Exception MsgBox(ex.GetType().FullName & vbCrLf & ex.Message, MsgBoxStyle.Exclamation) Finally If dbe IsNot Nothing Then If Marshal.IsComObject(dbe) Then Marshal.ReleaseComObject(dbe) End If dbe = Nothing End If End Try
|