【MS-Access】重い処理を応答なしで表示させない為、処理状況の表示を更新させる

Access

AccessからSQLServerへ数千件の追加処理に数分かかっています。
この時進捗状況もわからず、時間の経過によりアプリケーションは応答なしの表示になってしまいます。
これを回避させる為、進捗状況がわかるように表示機能を追加しました。
不具合や今後のメンテナンスの事を考慮し、プログレスバーのコントロールを使用せずに単純に処理件数のカウントアップのみとしました。

搭載方法

例えば、以下のように1000件のデータを追加するとします。

For i = 1 To 1000
ラベル.Caption = i
str_SQL = “INSERT INTO Aテーブル・・・”
db.Execute str_SQL
Next i

上記のコードで実行するとラベル.Captionは1~1000まで変化しますが、画面表示は1000件の追加が完了するまで画面更新されず、処理完了後に【1000】が表示されます。
解決策は強制的に画面更新を行う為、以下のようにDoEventsを入れてイベント発生させます。

For i = 1 To 1000
ラベル.Caption = i
DoEvents
str_SQL = “INSERT INTO Aテーブル・・・”
db.Execute str_SQL
Next i

まとめ

以上で追加処理の進捗具合の表示ができるようになりました。
時間の長い処理については、このように画面表示で伝える方法は比較的有効で、応用すると他にもいろいろな見せ方に使えると思います。

コメント