2010年7月30日(金) 18:24 JST

Access 2000 のリンク テーブルのパフォーマンスが遅い

  • 2009年5月 6日(水) 13:19 JST
  • 投稿者:
    matrix
  • 閲覧件数
    2,564
Access Tips 現象
テーブルを開くときにデータベース内のリンク テーブルの処理速度が遅いことや、更新の実行に予想以上の時間がかかることがあります。テーブルを開くときにデータベース内のリンク テーブルの処理速度が遅いことや、更新の実行に予想以上の時間がかかることがあります。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


テーブルにまだ [自動] の設定が残っている場合は、しばらくして、"サブデータシート名" プロパティが [なし] に更新されたシステム テーブル以外のテーブルの数を示すメッセージ ボックスが表示されます。

トラックバック

このエントリのトラックバックURL:
http://matrix-kh.com/matrix/trackback.php/2009050613190348
  • Access 2000 のリンク テーブルのパフォーマンスが遅い
  • 0件のコメント
  • アカウント登録
表示形式
コメント投稿

コメントは投稿者の責任においてなされるものであり、サイト管理者は責任を負いません。

オンラインユーザ

ゲストユーザ: 8

ログイン

ログイン