tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re: Access2007DBの最適化
投稿日: 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

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。