次の方法で共有


DBEngine.CompactDatabaseメソッド(DAO)

適用先: Access 2013 | Access 2016

閉じたデータベースをコピーして圧縮し、そのバージョン、照合順、および暗号化方式を変更することができます。 (Microsoft Access作業領域のみ)

注:

リンクされている暗号化されたテーブルを、アクション、更新、SQL クエリ [SQL UPDATE文 (CurrentDb.Execute "UPDATE...") など] に使用する場合、暗号化キーを指定する必要があります。 リンクされているテーブルに対する暗号化キーは 19 文字に制限されています。 このトピックの終わりにある「暗号化されたリンク テーブル」のセクションをご覧ください。

構文

。CompactDatabase(SrcName, DstName, DstLocale, Options, password)

DBEngineオブジェクトを返す式。

パラメーター

名前

必須かどうか

データ型

説明

SrcName

必須

String

既存の閉じているデータベースを識別します。 「C:\db1.mdb」のように、完全なパスとファイル名を指定できます。 ファイル名に拡張子が含まれる場合、それも指定する必要があります。 使用しているネットワークがネットワーク パスをサポートする場合は、「\\server1\share1\dir1\db1.mdb」のように、ネットワーク パスを指定できます。

DstName

必須

文字列型 (String)

作成中の最適化されたデータベースのファイル名およびそのパス。 ネットワーク パスを指定することもできます。 この引数を使用して、SrcName と同じデータベース ファイルを指定することはできません。

DstLocale

省略可能

Variant

「解説」に指定されているように、DstName の作成のための照合順序を指定する文字列式。

  • この引数を省略すると、DstName のロケールは SrcName と同じになります。

  • また、DstName のパスワードを作成するには、パスワード文字列を連結します (以降は ";pwd=") は、DstLocale 引数に定数を指定します。dbLangSpanish & ";pwd=NewPassword".

  • SrcName と同じ DstLocale (既定値) を使用するが、新しいパスワードを指定する場合は、DstLocale のパスワード文字列を入力します。pwd=NewPassword"

オプション

省略可能

バリアント型 (Variant)

省略可能。 解説に指定されているように、1 つ以上のオプションを示す定数または定数の組み合わせ。 対応する定数を加算すると、オプションを組み合わせることができます。

password

省略可能

Variant

暗号化キーを含む文字列式(データベースが暗号化されている場合) 文字列 ";pwd=" を実際のパスワードの前に挿入する必要があります。 DstLocaleにパスワード設定を含めると、この設定は無視されます。

:これは推奨されないパラメーターであり、.ACCDB形式ではサポートされていません。 .ACCDBファイルを暗号化するには、 "pwd ="オプション文字列を使用します。 [!メモ] パスワードには、大文字、小文字、数字、記号を組み合わせた複雑なものを使用してください。 これらの文字を混在させたものになっていないパスワードは強固とはいえません。 たとえば、Y6dh!et5 は安全性の高いパスワードです。 House27 は推測されやすいパスワードです。 強力なパスワードでありながら、書き留めておかなくても覚えておくことができるパスワードを使用してください。

注釈

次の定数のいずれかを DstLocale 引数に使用して、テキストの文字列比較を行う CollatingOrder プロパティを指定できます。

定数

照合順序

dbLangGeneral

英語、ドイツ語、フランス語、ポルトガル語、イタリア語、現代スペイン語

dbLangArabic

Arabic

dbLangChineseSimplified

簡体字中国語

dbLangChineseTraditional

繁体字中国語

dbLangCyrillic

ロシア語

dbLangCzech

チェコ語

dbLangDutch

オランダ語

dbLangGreek

ギリシャ語

dbLangHebrew

ヘブライ語

dbLangHungarian

ハンガリー語

dbLangIcelandic

アイスランド語

dbLangJapanese

日本語

dbLangKorean

韓国語

dbLangNordic

北欧諸国語 (Microsoft Jet データベース エンジン バージョン 1.0 のみ)

dbLangNorwDan

ノルウェー語およびデンマーク語

dbLangPolish

ポーランド語

dbLangSlovenian

スロベニア語

dbLangSpanish

古スペイン語

dbLangSwedFin

スウェーデン語およびフィンランド語

dbLangThai

タイ語

dbLangTurkish

トルコ語

引数 options に以下のいずれかの定数を使用すると、最適化する際に暗号化するか、または解読するかを指定できます。

注:

定数dbEncryptおよびdbDecryptは非推奨であり、.ACCDBファイル形式ではサポートされていません。

定数

説明

dbEncrypt

最適化中にデータベースを暗号化します。

dbDecrypt

最適化中にデータベースを解読します。

暗号化の定数を省略するか、または dbDecryptdbEncrypt の両方を指定すると、DstName の暗号化の設定は SrcName と同じになります。

引数 options に次のいずれかの定数を使用すると、最適化されたデータベースのデータの形式のバージョンを指定できます。 この定数は、DstName のデータ形式のバージョンだけに影響し、フォーム、レポートなどの Microsoft Access によって定義されたオブジェクトのバージョンには影響しません。

定数

説明

dbVersion10

最適化に Microsoft Jet データベース エンジン バージョン 1.0 のファイル形式を使用するデータベースを作成します。

dbVersion11

最適化に Microsoft Jet データベース エンジン バージョン 1.1 のファイル形式を使用するデータベースを作成します。

dbVersion20

最適化に Microsoft Jet データベース エンジン バージョン 2.0 のファイル形式を使用するデータベースを作成します。

dbVersion30

最適化に Microsoft Jet データベース エンジン バージョン 3.0 のファイル形式 (バージョン 3.5 互換) を使用するデータベースを作成します。

dbVersion40

最適化に Microsoft Jet データベース エンジン バージョン 4.0 のファイル形式を使用するデータベースを作成します。

dbVersion120

最適化に Microsoft Access データベース エンジン バージョン 12.0 のファイル形式を使用するデータベースを作成します。

指定できるバージョン定数は 1 つだけです。 バージョン定数を省略すると、DstName には SrcName と同じバージョンが指定されます。 DstName は、SrcName と同じかまたはそれ以降のバージョンのみに最適化できます。

データベースのデータを変更するに従って、データベースのファイルは断片化され、必要以上のディスク容量を使用する可能性があります。 CompactDatabase メソッドを定期的に実行すると、データベースを最適化してファイルの断片化を解消できます。 一般的に、最適化されたデータベースは小さく、実行速度も向上します。 データベースをコピーして最適化する間に、照合順序、暗号化、およびデータ形式のバージョンを変更することもできます。

データベースを最適化する前に SrcName を閉じる必要があります。 マルチユーザー環境では、最適化中に他のユーザーは SrcName を開くことはできません。 SrcName が閉じていないか、または排他的に使用できない場合は、エラーが発生します。

CompactDatabase メソッドはデータベースのコピーを作成するので、元のデータベースとデータベースのコピーに対して十分なディスク容量が必要です。 十分なディスク空き容量がない場合、最適化の操作は失敗します。 複製する DstName のデータベースは、SrcName と同じディスクに保存する必要はありません。 データベースの最適化が正常に終了した後に、元の SrcName ファイルを削除し、最適化された DstName ファイルを元のファイル名に変更できます。

CompactDatabase メソッドは、SrcName に指定されているデータベースから DstName に指定されているデータベースにすべてのデータおよびセキュリティ アクセス許可の設定をコピーします。

注:

CompactDatabase メソッドは Microsoft Access オブジェクトを変換できないので、CompactDatabase メソッドを使用してこのようなオブジェクトを含むデータベースを変換しないでください。

暗号化されたリンク テーブル

暗号化されたパスワードは、使用しているデータベースのファイル形式によって異なります。 Access 2003 (.mdb) 以前のデータベースを使用している場合は、データベースを保護するための 1 つのパスワードと、データベースを暗号化するための別のパスワードがあります。 Access 2007 (.accdb) 以降の (.mdb) データベースの場合、2 つの個別のパスワードを削除するオプションが削除されているため、1 つのパスワードでデータベースを暗号化して保護するオプションは 1 つだけです。

注:

Access 2007 (.accdb) データベースの場合、パスワードは暗号化キーです。

コマンド ボタンには、次のサンプル VBA コードを使用できます。

    Private Sub Command0_Click()
    
    Dim strSourcePath As String
    Dim strDestPath As String
    
    strSourcePath = "<path>\sourceDb.accdb"
    strDestPath = "<path>\destDb.accdb"
    
    DBEngine.CompactDatabase strSourcePath, strDestPath, dbLangGeneral & ";pwd=Access", dbVersion120, ";pwd=Access"
    
    Set CurrentDatabase = CurrentDb
    Set LinkedTableDef = CurrentDatabase.CreateTableDef 
    ("My Linked Table")
    LinkedTableDef.Connect = "MS Access;pwd=Access";database=" & strDestPath
    LinkedTableDef.RefreshLink
    
    
    MsgBox "Finished"
    
    End Sub 

次のコードサンプルは、パスワード(暗号化キー)を指定してCompactDatabaseを使用し、その圧縮データベース内のテーブルにリンクする方法を示しています。 パスワードを付与する必要があります。

    Private Sub CompactAndLink_Click() 
     
    Dim strSourcePath As String
    Dim strDestPath As String
    Dim strSourceTableName As String
    Dim strDestTableName As String
    Dim tdf As TableDef
     
    strSourcePath = "<path>\<database>.accdb"
    strDestPath = "<path>\<database>.accdb"
    strSourceTableName = "<table name in destination database>"
    strDestTableName = "<linked table name>"
     
    ' Compact source database into new destination database with encrypted password
    DBEngine.CompactDatabase strSourcePath, strDestPath, dbLangGeneral & ";pwd=Access", dbVersion120, ";pwd=Access"
     
    ' Link to one of the tables in the destination database
    ' Password must be provided in the Connect property
     
    Set CurrentDatabase = CurrentDb
    Set tdf = CurrentDatabase.CreateTableDef(strDestTableName)
       
        With tdf
            .Connect = ";pwd=Access" & ";DATABASE=" & strDestPath
            .SourceTableName = strSourceTableName
        End With
        
    CurrentDatabase.TableDefs.Append tdf
     
    MsgBox "Database compacted and encrypted password applied. Link to table also completed."
     
    End Sub