tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
Access2007DBの最適化(VB.NET) ( No.0 )  [親スレッドへ]
日時: 2010/01/20 07:54
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[データベース][][]                                         *
* キーワード:Access,JRO,CompactDatabase,DAO,修復,,                          *
***********************************************************************************
タイトル : Access2007DBの最適化
記 事 No : 6218
投 稿 日 : 2007/09/03(Mon) 16:18
元質問者 : 海が好き

Access2003のデータベースを2007に作り換えコード上からDB操作をしたいのですが、
Access2003の時にはできた最適化処理ができません。
-----------------------------------------------------------------------------------
記事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

---------------------------------------------------------



 [スレッド一覧へ] [親スレッドへ]