2

SQLServerでバックアップされたMSAccess.mdbファイルがあります。フォームを開こうとすると、表示に時間がかかります。フォームのロードイベントに何かがあったことがわかります。

SQLプロファイラーのようにMSAccessで実行時間を追跡する方法はありますか?

4

3 に答える 3

2

ファヒーム; 私はそのような追跡ソフトウェアを見たことがありません。

シンプルな「昔ながらの」方法: 各関数呼び出しの最後に msgBox を配置します。予想よりも長く実行されている関数を特定したら、その関数を調べます。レコードセットはインデックス付きフィールドを使用していますか? 複数のレコードセットを同時に開かないようにしてください。ループの使用を最小限にしていますか? ループは最適化されていますか?

もう 1 つ確認する必要があるのは、Access マクロを使用して集計 (合計、平均) を計算することです。これにより、Access は個々のクエリを繰り返し実行します。100,000 を超えるレコードと 2 ダースの列を処理している状況では、Access マクロは 2 ダース (列ごとに 1 回) 起動します。

上記の方法を使用して、適切なサイズの DB ウェアハウス アプリ (メインのデータ テーブルに 250 万レコード、40 列) を取得し、処理に 1 時間かかっていたレポートを 5 秒に短縮しました。クライアントはとても喜んでいました。

于 2014-02-06T15:01:47.310 に答える
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"
于 2013-03-11T19:40:06.350 に答える
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

ここを見る

また、フォームのデザインも確認してください。サブフォーム/マスター/子リンクはたくさんありますか? アグリゲーションはどのくらいありますか?等。

于 2014-02-28T21:32:50.420 に答える