Версия данной статьи для Microsoft Access 2000: 261000 (Эта ссылка может указывать на содержимое полностью или частично на английском языке).
Малоопытным пользователям. Материал, изложенный в этой статье, требует знания интерфейса пользователя для однопользовательского режима.
Данная статья применима только к базам данных Microsoft Access (MDB).
Проблема
При открытии связанной таблицы в Microsoft Access 2002, Microsoft Office Access 2003 или Microsoft Office Access 2007, для которой в подтаблице могут отображаться связанные записи, это занимает намного больше времени, чем при работе с этой же базой данных в Microsoft Access 97.
Причина
Такое поведение наблюдается при наличии в базе данных множества связанных таблиц и большого количества отношений, если свойству Имя подтаблицы открываемой таблицы присвоено значение [Авто].
Решение
Для обходного решения данной проблемы присвойте свойству Имя подтаблицы значение [Отсутствует]. Это можно сделать вручную или программным путем.
Присвоение значения свойству "Имя подтаблицы" вручную
Чтобы вручную присвоить значение свойству Имя подтаблицы, выполните указанные ниже действия.
Примечание. Эти действия применимы только к Access 2002.
-
Откройте таблицу в базе данных таблиц в режиме конструктора.
-
В меню Вид выберите пункт Свойства.
-
Присвойте свойству Имя подтаблицы значение [ОТСУТСТВУЕТ].
-
Сохраните и закройте таблицу.
Присвоение значения свойству "Имя подтаблицы" для всех таблиц программным путем
Чтобы автоматически присвоить свойству Имя подтаблицы для всех несистемных таблиц в базе данных значение [ОТСУТСТВУЕТ], можно воспользоваться функцией на языке VBA (Visual Basic for Applications). Для этого выполните указанные ниже действия.
-
Откройте базу данных таблиц.
-
В окне базы данных нажмите кнопку Модули, а затем — Создать.
-
В меню Tools выберите пункт References. Убедитесь, что флажок Microsoft DAO 3.6 Object Library установлен, и нажмите кнопку ОК.
-
Введите или вставьте в новый модуль приведенный ниже код.
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 -
В окне Immediate введите следующий текст и нажмите клавишу ВВОД, чтобы выполнить функцию:
TurnOffSubDataSheets
Обратите внимание, чтоб через некоторое время, если еще не все таблицы обновлены, появится сообщение о том, что свойству SubDataSheetName для <число_обновленных_таблиц> несистемных таблиц было присвоено значение [ОТСУТСТВУЕТ].
Дополнительная информация
В Office Access 2007, Access 2003, Access 2002 и Access 2000 можно просматривать связанные записи таблицы в подтаблице; такая возможность отсутствует в Access 97. Для управления отношениями между главной и связанными таблицами системе требуются дополнительные ресурсы, что может привести к увеличению времени отклика, в частности в том случае, когда в базе данных имеется большое количество связанных таблиц и большое количество отношений между таблицами.
У главной таблицы в отношении "один ко многим" (у таблицы, которая находится со стороны "один") свойству Имя подтаблицы можно присвоить значение [Отсутствует], при котором подтаблицы отображаться не будут. Свойству Имя подтаблицы также можно присвоить имя конкретной связанной таблицы либо значение [Авто]. Если свойству присвоено значение [Авто], это позволяет выбрать связанную таблицу, записи которой можно будет просмотреть при нажатии индикатора раскрыть записи в главной таблице. Если свойству присвоено значение [Авто], это может привести к существенному снижению производительности, особенно на устаревших компьютерах, если в базе данных имеется большое количество связанных таблиц. Такое поведение не наблюдается, если все таблицы находятся в одной базе данных.
Поскольку проблема заключается в низкой производительности, то при различных тактовых частотах процессора и системных ресурсах база данных, нормально работающая на одном компьютере, может медленно работать на другом.
Корпорация Майкрософт предлагает примеры программного кода только для иллюстрации и не предоставляет явных или подразумеваемых гарантий относительно их пригодности для применения в пользовательских приложениях. Примеры в данной статье рассчитаны на пользователя, имеющего достаточный уровень знаний соответствующего языка программирования и необходимых средств разработки и отладки. Специалисты служб технической поддержки Майкрософт могут пояснить назначение тех или иных конструкций кода в конкретном примере, но модификация примеров и их адаптация к задачам разработчика не предусмотрена.