適用先: 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 の作成のための照合順序を指定する文字列式。
|
オプション |
省略可能 |
バリアント型 (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 |
最適化中にデータベースを解読します。 |
暗号化の定数を省略するか、または dbDecrypt と dbEncrypt の両方を指定すると、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