
現象
テーブルを開くときにデータベース内のリンク テーブルの処理速度が遅いことや、更新の実行に予想以上の時間がかかることがあります。テーブルを開くときにデータベース内のリンク テーブルの処理速度が遅いことや、更新の実行に予想以上の時間がかかることがあります。Microsoft Access 2000 より前のバージョンからデータベースの変換を実行した後に、この現象が発生する場合があります。ただしこの変換を実行していない場合でも、このような現象が発生する可能性があります。
原因
データベースに多数のリンク テーブルが存在し、各リンク テーブルに多数のリレーションシップが設定されています。また、開こうとしているテーブルの "サブデータシート名" プロパティが [自動] に設定されています。このような場合、テーブルを開くのに時間がかかることがあります。サブデータシートは Access 2000 で導入された新しい機能です。このため、Access 2000 より前のバージョンからデータベースを変換した場合に、この現象が顕著に現れる可能性があります。
解決方法
この問題を回避するには、バックエンド データベース内の各テーブルの "サブデータシート名" プロパティを [なし] に設定します。この設定の変更は、手動で行うか、コードを使用して行うことができます。
サブデータシート名を手動で設定する
"サブデータシート名" プロパティを手動で設定するには、次の手順を実行します。
1. バックエンド データベースのテーブルをデザイン ビューで開きます。
2. [表示] メニューの [プロパティ] をクリックします。
3. "サブデータシート名" プロパティを [なし] に設定します。
4. テーブルを保存して、閉じます。
プログラミングですべてのテーブルのプロパティを設定する
Visual Basic for Applications を使用して、データベース内にある、システム テーブルを除くすべてのテーブルの "サブデータシート名" プロパティを [なし] に設定することができます。設定を自動で行うには、以下の手順を実行します。
1. バックエンド データベースを開きます。
2. [データベース] ウィンドウの [モジュール] をクリックし、[新規作成] をクリックします。
3. [ツール] メニューの [参照設定] をクリックします。[Microsoft DAO 3.6 Object Library] チェック ボックスがオンになっていることを確認し、[OK] をクリックします。
4. 新しいモジュールに次のコードを入力するか、コピーして貼り付けます。
Sub TurnOffSubDataSheets()
Dim MyDB As
DAO.Datab
Dim MyProperty As
DAO.Prope
Dim propName As String, propVal As String, rplpropValue As String
Dim propType As Integer, i As Integer
Dim intCount As Integer
On Error GoTo tagError
Set MyDB = CurrentDb
propName = "SubDataSheetName"
propType = 10
propVal = "[None]"
rplpropValue = "[Auto]"
intCount = 0
For i = 0 To
MyDB.TableDefs.Count - 1
If (
MyDB.Table(i).Attributes And dbSystemObject) = 0 Then
If
MyDB.Table(i).Properties(propName).Value = rplpropValue Then
MyDB.Table(i).Properties(propName).Value = propVal
intCount = intCount + 1
End If
End If
tagFromErrorHandling:
Next i
MyDB.Close
If intCount > 0 Then
MsgBox "The " & propName & " value for " & intCount & " non-system tables has been updated to " & propVal & "."
End If
Exit Sub
tagError:
If
Err.Numbe = 3270 Then
Set MyProperty =
MyDB.Table(i).CreateProperty(propName)
MyProperty.Type = propType
MyProperty.Value = propVal
MyDB.Table(i).
Properties.Appen MyProperty
intCount = intCount + 1
Resume tagFromErrorHandling
Else
MsgBox
Err.Descr & vbCrLf & vbCrLf & " in TurnOffSubDataSheets routine."
End If
End Sub
5. イミディエイト ウィンドウで次のテキストを入力し、Enter キーを押して関数を実行します。
TurnOffSubDataSheets
テーブルにまだ [自動] の設定が残っている場合は、しばらくして、"サブデータシート名" プロパティが [なし] に更新されたシステム テーブル以外のテーブルの数を示すメッセージ ボックスが表示されます。
コメントは投稿者の責任においてなされるものであり、サイト管理者は責任を負いません。