Низкая производительность при работе со связанными таблицами в Access 2002, Office Access 2003 и Office 2007

Переводы статьи Переводы статьи
Код статьи: 275085 - Vizualiza?i produsele pentru care se aplic? acest articol.
Версия данной статьи для 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. Сохраните и закройте таблицу.

Присвоение значения свойству "Имя подтаблицы" для всех таблиц программным путем

Чтобы автоматически присвоить свойству Имя подтаблицы для всех несистемных таблиц в базе данных значение [ОТСУТСТВУЕТ], можно воспользоваться функцией на языке VBA (Visual Basic for Applications). Для этого выполните указанные ниже действия.
  1. Откройте базу данных таблиц.
  2. В окне базы данных нажмите кнопку Модули, а затем — Создать.
  3. В меню Tools выберите пункт References. Убедитесь, что флажок Microsoft DAO 3.6 Object Library установлен, и нажмите кнопку ОК.
  4. Введите или вставьте в новый модуль приведенный ниже код.
    Sub TurnOffSubDataSheets()
    Dim MyDB As DAO.Database
    Dim MyProperty As DAO.Property
    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.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 If
    tagFromErrorHandling:
    Next i
    
    MyDB.Close
    
    If intCount > 0 Then
        MsgBox "Свойству " & propName & " для " & intCount & " несистемных таблиц было присвоено значение " & propVal & "."
    End If
    
    Exit Sub
    
    tagError:
    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 tagFromErrorHandling
    Else
        MsgBox Err.Description & vbCrLf & vbCrLf & " в процедуре TurnOffSubDataSheets."
    End If
    End Sub
    
  5. В окне Immediate введите следующий текст и нажмите клавишу ВВОД, чтобы выполнить функцию:
    TurnOffSubDataSheets
    						
    Обратите внимание, чтоб через некоторое время, если еще не все таблицы обновлены, появится сообщение о том, что свойству SubDataSheetName для <число_обновленных_таблиц> несистемных таблиц было присвоено значение [ОТСУТСТВУЕТ].

Дополнительная информация

В Office Access 2007, Access 2003, Access 2002 и Access 2000 можно просматривать связанные записи таблицы в подтаблице; такая возможность отсутствует в Access 97. Для управления отношениями между главной и связанными таблицами системе требуются дополнительные ресурсы, что может привести к увеличению времени отклика, в частности в том случае, когда в базе данных имеется большое количество связанных таблиц и большое количество отношений между таблицами.

У главной таблицы в отношении "один ко многим" (у таблицы, которая находится со стороны "один") свойству Имя подтаблицы можно присвоить значение [Отсутствует], при котором подтаблицы отображаться не будут. Свойству Имя подтаблицы также можно присвоить имя конкретной связанной таблицы либо значение [Авто]. Если свойству присвоено значение [Авто], это позволяет выбрать связанную таблицу, записи которой можно будет просмотреть при нажатии индикатора раскрыть записи в главной таблице. Если свойству присвоено значение [Авто], это может привести к существенному снижению производительности, особенно на устаревших компьютерах, если в базе данных имеется большое количество связанных таблиц. Такое поведение не наблюдается, если все таблицы находятся в одной базе данных.

Поскольку проблема заключается в низкой производительности, то при различных тактовых частотах процессора и системных ресурсах база данных, нормально работающая на одном компьютере, может медленно работать на другом.

Корпорация Майкрософт предлагает примеры программного кода только для иллюстрации и не предоставляет явных или подразумеваемых гарантий относительно их пригодности для применения в пользовательских приложениях. Примеры в данной статье рассчитаны на пользователя, имеющего достаточный уровень знаний соответствующего языка программирования и необходимых средств разработки и отладки. Специалисты служб технической поддержки Майкрософт могут пояснить назначение тех или иных конструкций кода в конкретном примере, но модификация примеров и их адаптация к задачам разработчика не предусмотрена.

Свойства

Код статьи: 275085 - Последний отзыв: 25 февраля 2008 г. - Revision: 10.3
Информация в данной статье относится к следующим продуктам.
  • Microsoft Office Access 2007
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
Ключевые слова: 
kbbug kbperformance kbnofix KB275085

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com