2013-03-09 3 views
1

У меня есть файл MSAccess .mdb, поддерживаемый сервером sql. Когда я пытаюсь открыть форму, она занимает много времени, чтобы отобразить Я знаю, что у меня были вещи при загрузке формы.Профайлер для MSAccess

Есть ли способ отслеживать время выполнения в MSAccess, например, SQL Profiler?

ответ

0

Я действительно не знаю, что вы подразумеваете под «Я знаю, что у меня были вещи при загрузке события формы». Не можете ли вы проверить макросы/VBA, прикрепленные к вашей форме? Что вы делаете при загрузке?

  • У вас есть несколько подформ в вашей форме? При использовании форм с несколькими подформами я испытал длительное время открытия/загрузки. Особенно, когда подформы вытягивают небольшое подмножество данных из очень большого источника записи.

Проверить эту ссылку из: http://bytes.com/topic/access/answers/204374-timer-function-determining-code-execution-speed

Dim sngStart As Single 
Dim sngEnd As Single 
Dim sngElapsed As Single 
Dim time As Single 

sngStart = Timer ' Get start time 


'your code here 

sngEnd = Timer 'get stop time 
sngElapsed = sngEnd - sngStart 

time = Format(sngElapsed, "######0.0000000000") 
MsgBox "Time elapsed: " & time, vbInformation, "Time Elapsed" 
+0

спасибо за ссылку и код. Это хорошо. Фактически мне понадобилось ** программное обеспечение **, которое будет отслеживать каждый оператор/запрос/команду во время работы в MSAccess. В sql-сервере мы можем просмотреть каждую деталь в Sql Profiler. Он показывает полную детализацию вещей от начала и до конца. –

+0

Поскольку вы подключены к SQL Server, запустите профайлер и он покажет каждый запрос/ответ на SQL Server. – david

2

Фахим; Я никогда не видел такого программного обеспечения для отслеживания.

Простой метод «старой школы»: Поместите msgBox в конце каждого вызова функции. После того как вы выделили, какая функция работает дольше, чем ожидалось, просмотрите функцию. Используются ли ваши наборы записей с индексированными полями? Избегайте одновременного открытия нескольких наборов записей. Вы минимизируете использование циклов? Оптимизированы ли ваши петли?

Еще одна вещь, которую нужно проверить, - это использование макросов доступа для вычисления агрегатов (суммы, средние значения). Это вызывает доступ для повторного запуска отдельных запросов. Если у вас была ситуация, когда вы имели дело с более чем 100 000 записей и 2 дюжинами столбцов, макросы доступа будут запускать 2 десятка раз (один раз для каждого столбца).

Используя методы, описанные выше, я применил приложение DB Warehouse хорошего размера (0,25 миллиона записей в основной таблице данных, 40 столбцов) и упростил отчеты, потратив час на обработку до 5 секунд. Клиент был очень доволен.

0
Option Compare Database 
Option Explicit 

Private Declare Function timeGetTime _ 
Lib "winmm.dll"() As Long 
Private mlngStartTime As Long 

Private Function ElapsedTime() As Long 
ElapsedTime = timeGetTime() - mlngStartTime 
End Function 

Private Sub StartTime() 
mlngStartTime = timeGetTime() 
End Sub 

Public Function MyTest() 

Call StartTime 
DoCmd.OpenQuery "Query1" 
DoCmd.GoToRecord acDataQuery, "Query1", acLast 

Debug.Print ElapsedTime() & _ 

Call StartTime 
DoCmd.OpenQuery "Query2" 
DoCmd.GoToRecord acDataQuery, "Query2", acLast 

Debug.Print ElapsedTime() & _ 
End Function 

See Here

Кроме того, проверьте свой дизайн формы. Есть много субформ/Ссылки на мастера/ребенка? Сколько существует агрегация? И т.д.