- 日時: 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
---------------------------------------------------------
|