現在オフラインです。再接続するためにインターネットの接続を待っています

Access 2002、Office Access 2003、および Office Access 2007 のリンク テーブルでパフォーマンスが低下する

Office 2003 のサポートは終了しました

マイクロソフトでは、2014 年 4 月 8 日に Office 2003 のサポートを終了しました。この変更は、ソフトウェアの更新プログラムおよびセキュリティ オプションに影響しています。 この変更の意味および保護された状態を維持する方法について説明します。

Microsoft Access 2000 については、次の資料を参照してください。261000
難易度 : 低。シングル ユーザー コンピュータのユーザー インターフェイスに関する知識が必要です。

この資料は Microsoft Access データベース (.mdb) についてのみ記述したものです。

現象
サブデータシート内の関連レコードを表示できる Microsoft Access 2002、Microsoft Office Access 2003、または Microsoft Office Access 2007 のリンク テーブルを開くと、同じデータベースを Microsoft Access 97 で開いた場合よりも処理に著しく時間がかかります。
原因
この現象は、データベース内に多くのリンク テーブルが存在し、それらのテーブルに多くのリレーションシップが含まれていて、開こうとしているテーブルの "サブデータシート名" プロパティが [自動] に設定されている場合に発生します。
解決方法
この問題を回避するには、テーブルの "サブデータシート名" プロパティを [なし] に設定します。この設定の変更は、手動で行うか、コードを使用して行うことができます。

"サブデータシート名" プロパティを手動で設定する

"サブデータシート名" プロパティを手動で設定するには、次の手順を実行します。

: 以下の手順は、Access 2002 でのみ使用できます。
  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.DatabaseDim MyProperty As DAO.PropertyDim propName As String, propVal As String, rplpropValue As StringDim propType As Integer, i As IntegerDim intCount As IntegerOn Error GoTo tagErrorSet MyDB = CurrentDbpropName = "SubDataSheetName"propType = 10propVal = "[None]"rplpropValue = "[Auto]"intCount = 0For i = 0 To MyDB.TableDefs.Count - 1    If (MyDB.TableDefs(i).Attributes And dbSystemObject) = 0 Then        If MyDB.TableDefs(i).Properties(propName).Value = rplpropValue Then             MyDB.TableDefs(i).Properties(propName).Value = propVal             intCount = intCount + 1        End If    End IftagFromErrorHandling:Next iMyDB.CloseIf intCount > 0 Then    MsgBox "The " & propName & " value for " & intCount & " non-system tables has been updated to " & propVal & "."End IfExit SubtagError:If Err.Number = 3270 Then    Set MyProperty = MyDB.TableDefs(i).CreateProperty(propName)    MyProperty.Type = propType    MyProperty.Value = propVal    MyDB.TableDefs(i).Properties.Append MyProperty    intCount = intCount + 1    Resume tagFromErrorHandlingElse    MsgBox Err.Description & vbCrLf & vbCrLf & " in TurnOffSubDataSheets routine."End IfEnd Sub
  5. イミディエイト ウィンドウで次のテキストを入力し、Enter キーを押して関数を実行します。
    TurnOffSubDataSheets						
    テーブルにまだ [自動] の設定が残っている場合は、しばらくして、"サブデータシート名" プロパティが [なし] に更新された、システム テーブル以外のテーブルの数を示すメッセージ ボックスが表示されます。
詳細
Office Access 2007、Access 2003、Access 2002、および Access 2000 では、サブデータシート内にテーブルの関連レコードを表示できます。この機能は、Access 97 では使用できません。主テーブルと関連テーブルとの間のリレーションシップを管理するために、システムで追加のオーバーヘッドが必要になり、これにより応答時間が長くなる可能性があります。特に、データベース内に数多くのリンク テーブルが存在し、それらのテーブル間に多くのリレーションシップがある場合に影響が顕著になります。

一対多リレーションシップの主テーブル ("一" の側のテーブル) では、"サブデータシート名" プロパティを [なし] に設定できます。この場合、サブデータシートは表示されません。また、このテーブルの "サブデータシート名" プロパティは特定の関連テーブルの名前に設定するか、[自動] に設定することもできます。このプロパティが [自動] に設定されている場合は、主テーブル内でレコードの展開インジケータをクリックしたときにレコードを表示する関連テーブルを選択できます。このプロパティを [自動] に設定すると、パフォーマンスが著しく低下する可能性があります。これは特に、コンピュータが古く、データベースで数多くのリンク テーブルが使用されている場合に顕著になります。この現象は、テーブルがすべて同じデータベース内にある場合には発生しません。

パフォーマンスの低下が問題であるため、プロセッサ速度や利用可能なシステム リソースなどの要因によって、特定のコンピュータ上では問題なく実行されるデータベースが、別のコンピュータ上では実行速度が低下することがあります。

マイクロソフトは、この情報をプログラミング言語の使用方法の一例として提供するだけであり、市場性および特定目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。この資料は、例示されているプログラミング言語やプロシージャの作成およびデバッグに使用するツールについて理解されているユーザーを対象としています。Microsoft Support 担当者は、特定のプロシージャの機能についての問い合わせにはお答えできますが、ユーザー固有の目的に合わせた機能の追加、プロシージャの作成などの内容変更は行っておりません。
prb long time ACC2007
プロパティ

文書番号:275085 - 最終更新日: 05/23/2007 01:38:40 - リビジョン: 10.1

  • Microsoft Office Access 2007
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
  • kbbug kbperformance kbnofix KB275085
フィードバック