Access. Программирование на VBA

Повышение скорости печати отчетов


Какой смысл в быстродействующей базе данных, если она целый день распечатывает отчет? Единственная большая и оказывающая влияние на производительность разница между формами и отчетами заключается в способе обработки разделов. В форме существует заголовок формы, область дан­ных и примечание формы. В отчете имеются заголовок и примечание отчета, заголовок и примечание страницы, заголовки и примечания разделов, а также область данных. При открытии формы запрос, на котором она основана, выполняется только один раз. При открытии отчета он должен создать запрос (основываясь на запросе в источнике записей) для каждого раздела. Если запрос очень сложен, отчет должен выполнять его или ^некоторые его части несколько раз.

Ниже приводятся советы, следуя которым можно повысить скорость создания отчетов.

• Запрос, на котором основывается отчет, должен быть как можно более простым.

• Рекомендуется перенести вычисления в отчет. Если поместить вычисления в запрос, они будут вы­полняться для каждой строки. Однако, если поместить вычисления в отчет, они будут выполнять­ся только при необходимости и пользователь сразу после расчета одной страницы данных Access увидит результат.

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

• Необходимо избегать использования подчиненных запросов в источнике отчета. Отчетам необходим большой объем памяти, а запрос с подчиненными запросами поглощает больше памяти, чем тре­буется в действительности.

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




• Необходимо избегать сортировки или группировки выражений. Чтобы правильно отображать сорти­ровку или группировку. Access будет вынужден просчитывать каждое выражение больше чем один раз. Значения следует рассчитать до того, как они перейдут в отчет.

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

• Источник записей не должен содержать агрегирующие доменные функции (DIookup). Снова это вынуждает отчет выполнять дополнительную обработку данных, что задерживает отображение от­чета.

• Нет смысла в отображении для пользователей пустого отчета с записями #Еггог. Если отчет не содержит данных, следует отправить пользователю соответствующее сообщение и закрыть отчет. Оп­ределить, содержит ли отчет данные для отображения, можно с помощью свойств HasData или NoData.

Многие из методик, которые используются для повышения производительности форм, можно исполь­зовать и для отчетов. В данном разделе были описаны только те подходы, которые ограничиваются отче­тами.


Содержание раздела