SQLServerでバックアップされたMSAccess.mdbファイルがあります。フォームを開こうとすると、表示に時間がかかります。フォームのロードイベントに何かがあったことがわかります。
SQLプロファイラーのようにMSAccessで実行時間を追跡する方法はありますか?
SQLServerでバックアップされたMSAccess.mdbファイルがあります。フォームを開こうとすると、表示に時間がかかります。フォームのロードイベントに何かがあったことがわかります。
SQLプロファイラーのようにMSAccessで実行時間を追跡する方法はありますか?
ファヒーム; 私はそのような追跡ソフトウェアを見たことがありません。
シンプルな「昔ながらの」方法: 各関数呼び出しの最後に msgBox を配置します。予想よりも長く実行されている関数を特定したら、その関数を調べます。レコードセットはインデックス付きフィールドを使用していますか? 複数のレコードセットを同時に開かないようにしてください。ループの使用を最小限にしていますか? ループは最適化されていますか?
もう 1 つ確認する必要があるのは、Access マクロを使用して集計 (合計、平均) を計算することです。これにより、Access は個々のクエリを繰り返し実行します。100,000 を超えるレコードと 2 ダースの列を処理している状況では、Access マクロは 2 ダース (列ごとに 1 回) 起動します。
上記の方法を使用して、適切なサイズの DB ウェアハウス アプリ (メインのデータ テーブルに 250 万レコード、40 列) を取得し、処理に 1 時間かかっていたレポートを 5 秒に短縮しました。クライアントはとても喜んでいました。
「フォームのロードイベントに何かがあったことは知っています」という意味がよくわかりません。フォームに添付されたマクロ/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"
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
また、フォームのデザインも確認してください。サブフォーム/マスター/子リンクはたくさんありますか? アグリゲーションはどのくらいありますか?等。