tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルAccess2007DBの最適化
記事No6218
投稿日: 2007/09/03(Mon) 16:18
投稿者海が好き
初投稿です!

環境
WindowsXP Professional Edition
VS2005
Access2007

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

Dim Jro As New JRO.JetEngine
  Jro.CompactDatabase(strS, strT) '最適化したファイルを作成 ← *ここで落ちます

Access2007バージョンでDBの拡張子が.accdbとなっていること、
データプロバイダがMicrosoft.Jet.OLEDB.4.0→Microsoft.ACE.OLEDB.12.0に変更
が原因で[JRO.JetEngine]が使えないのだと思われます。

何か最適化する良い方法はないでしょうか。
ご教授お願いします。

[ツリー表示へ]
タイトルRe: Access2007DBの最適化
記事No6219
投稿日: 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

[ツリー表示へ]
タイトルRe^2: Access2007DBの最適化
記事No6226
投稿日: 2007/09/04(Tue) 09:09
投稿者海が好き
お返事ありがとうございます。

こんなに早くお返事が来るとは思ってもいなくうれしい限りです。
さっそく試させていただきます。

結果の出しだい、報告させていただきます。

[ツリー表示へ]
タイトルRe^2: Access2007DBの最適化
記事No6239
投稿日: 2007/09/05(Wed) 11:59
投稿者海が好き
こちら側の都合上、案2を使わせていただきました。

ところが、うまくいかない!
「dbVersion120」が出ない!
と思っていると・・・

「Microsoft DAO 3.6 Object Library」を参照設定に入れたままになっているのが
原因でした。
(気づいてくれた先輩に感謝!)
これを削除して無事解決。

魔界の仮面弁士様、ありがとうございました。
また、返信内容の説明もたいへんわかりやすくて非常に助かりました!

[ツリー表示へ]