ACCESSのMDBを圧縮する

.NET (VB)の内容
【注意書き】
●VB.NET を使っているものとします。
●動作環境は、Windows XX を使用しているとします。
●Microsoft.Jet.OLEDB.4.0 を使用しています。


VB.NET でも、
ACCESSのMDBを圧縮することが可能です。

この機能を使えば、簡単に、
ACCESSのMDBを圧縮して、DBの最適化の機能を持たせたアプリケーション
など簡単に作成できます。


フォームに次の様なコードを記述します


-----------VB.NETコーディングここから-------------------

1.メニューバーの中に、「プロジェクト」→「参照の追加」
   から、「COM」のタブ中にある
    Microsoft ADO Ext X.X for DDL and Security を選んで、
   「選択」を押します。

  次に、続けて、
    Microsoft Jet and Replication Object x.x Library を選んで、
   「選択」を押します。

    その後、「OK」を押します。

  この操作で、2つの参照が追加されます。
      ※バージョンは、X.Xの部分が数字です。
      Microsoft ADO Ext 2.7 for DDL and Security
      Microsoft Jet and Replication Object 2.6 Library
      など

2.フォームに、
    テキストボックスコントロール、
    ボタンコントロール
    を配置します。
    下記は、デフォルトのオブジェクトの名前と配置を示しています。

   ┏━━━━━━━━━━━┓
   ┃TextBox1              ┃
   ┃※複数行              ┃
   ┃                      ┃
   ┗━━━━━━━━━━━┛
   ┏━━━━┓
   ┃Button1 ┃
   ┗━━━━┛



3.ボタンコントロールの
    Button1 text プロパティに「MDB圧縮」と記述します。

   ┏━━━━━━━━━━━┓
   ┃TextBox1              ┃
   ┃※複数行              ┃
   ┃                      ┃
   ┗━━━━━━━━━━━┛
   ┏━━━━━━━┓
   ┃MDB作成       ┃
   ┗━━━━━━━┛



4.ボタンコントロールをダブルクリックして、
    ボタンのクリックイベントの編集を開始して、
    フォームの宣言部に、次のコードを記述します。
    ※フォームクラス定義(Public Class Form1)より、
    上に記述してください。

    Imports System.IO




  さらに次のコードを記述します。


    Dim MjstrPath As String

    Private Sub Form1_Load(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles MyBase.Load

        TextBox1.Text = ""

    End Sub


    Private Sub Button1_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button1.Click


        Dim objJRO As JRO.JetEngine
        Dim strPRO As String
        Dim strSRC As String
        Dim strNEWSRC As String
        Dim strFNAME As String
        Dim strDNAME As String
        Dim strJET As String
        Dim strCMPM As String   '圧縮前
        Dim strCMPS As String   '圧縮後

        MjstrPath = GET_FPATH()
        If MjstrPath = "" Then
            'パスの指定がなかった
            MsgBox("圧縮するMDBを指定してください")
        Else
            '圧縮します
            objJRO = New JRO.JetEngine

            strPRO = "Provider=Microsoft.Jet.OLEDB.4.0"

            strSRC = "Data Source=" & MjstrPath

            strFNAME = Path.GetFileName(MjstrPath)
            strDNAME = Path.GetDirectoryName(MjstrPath)
            strNEWSRC = "Data Source=" & strDNAME & "\" & "New" & strFNAME

            If Dir(strDNAME & "\" & "New" & strFNAME) <> "" Then

                TextBox1.Text = "圧縮先" & strNEWSRC _
                                & "がすでに存在しているため圧縮できません"
                TextBox1.Text &= "一旦圧縮先のファイルを削除して再度実行してください。"
                Exit Sub
            End If


            strJET = "Jet OLEDB:Engine Type=5"


            strCMPM = strPRO & ";" & strSRC
            strCMPS = strPRO & ";" & strNEWSRC & ";" & strJET

            Try

                objJRO.CompactDatabase(strCMPM, strCMPS)
                TextBox1.Text = "圧縮しました。圧縮先ファイルは、「 " _
                                & strNEWSRC & " 」です"

                MsgBox("圧縮しました")
            Catch ex As Exception
                TextBox1.Text = "圧縮しようとしているファイルの圧縮ができません"
                MsgBox("圧縮できません")
            End Try
        End If
        objJRO = Nothing

    End Sub

    'ファイルパスを返す
    Private Function GET_FPATH() As String
        GET_FPATH = ""

        Dim openFileDialog1 As New OpenFileDialog
        Dim strPath As String

        'カレントドライブとパスの設定
        openFileDialog1.InitialDirectory = "c:\"

        'フィルターの設定(テキストファイル、すべてのファイル)
        openFileDialog1.Filter = _
           "mdb files (*.mdb)|*.mdb|All files (*.*)|*.*"

        'フィルターの設定(2番目のすべてのファイル)
        openFileDialog1.FilterIndex = 2

        'ディレクトリ情報の更新
        openFileDialog1.RestoreDirectory = True

        If openFileDialog1.ShowDialog() = DialogResult.OK Then
            'オープン対象のパスをセットしています。
            strPath = openFileDialog1.FileName
        End If

        'openFileDialog1 = Nothing

        GET_FPATH = strPath
    End Function




5.ビルドして実行します。

6.フォームに表示された
    コマンドボタン「MDB圧縮」を押します。

7.指定したmdb ファイルが "New" を


-----------VB.NETコーディングここまで-------------------

本サンプルでは、
圧縮元ファイル名と圧縮先ファイル名が異なります。
たとえば、圧縮元ファイル名が "a.mdb" であった場合は、
その先頭に "New" の文字列を付加した "Newa.mdb" が
圧縮先ファイル名となります。

圧縮先指定がすでに存在しているファイル名であった場合は、
CompactDatabase では、エラーとなります。

本サンプルでは、ファイルを削除する
概念を、サンプル実行の安全性より取り入れておりませんので、
その場合は、任意でファイルを削除しておいてください。


また、圧縮作成したmdb は、圧縮元のmdb が存在しているディレクトリと、
同じディレクトリに作成するようにしています。


本サンプルでは、Microsoft.Jet.OLEDB.4.0 を圧縮するために
使用しています。



 

http://anetm.com/dev/d.cgi?SC=DTDTL&o=Ouw

Copyright(c)2001-2006 Ai Net Makoto 記事・情報の無断転載を禁止します。