2009-07-16 26 views
0

私は、ユーザーがプログラムを長時間使用した後に終了ボタンをクリックするとハングアップするMicrosoft Accessプログラムをデバッグしています。このプログラムは、SQLデータベースのバックエンドを備えたリーンなアクセスフロントエンドです。DoCmd.Quit Microsoft Accessでハングします

DoCmd.Quit 

は、今私は、これはアンチウイルスによって引き起こされる可能性が疑っている:私のパズル

一つは、終了ボタンは、次のコマンドを除いて何もしないということです。 MS Accessは、終了時にデータベースファイルの書き込み(圧縮)を試みますが、ウイルス対策ソフトウェアはそれを好まないでしょう。

しかし、私は他の誰かが以前にこの問題を抱えていたと思いますか?この問題を引き起こす可能性のあるものは何ですか?

答えて

2

DBにはおそらく自動圧縮があり、docmd.quitはそのオプションを実行します。大規模なdbのコンパクションは、たとえSQLにバックアップされていても、ハングアップのように見えるほど時間がかかります。

はこれを試してみてください...

Application.Quit acQuitSaveNoneは速く閉じますが、コンパクトではないでしょうします。

+0

私はそれを試してみましょう+1 – oscarkuo

2

私はこの種の動作を経験しており、静的なDAOレコードセットを使用してそれを閉じることができなかったコードによって騒がれました。

Static rs As DAO.Recordset 
'Missing code 
rs.Close 

ビットあいまいいますが、しかし任意の手段によってアプリケーションを閉じるときにこれがいた...

を知っていることはありません。

+0

Oo私はしかし、それを見つけるために時間がかかった... – mavnn

+0

はい - 私は約3週間(私は髪を持っていたときに戻る) – Mark3308

1

COMPACT ON CLOSEをオンにしている場合は、

ターンオフします。

これは、実装された形でAccessに追加されるべきではない、無益な「機能」です。

  1. 何Accessアプリケーションが、フロントエンド(フォーム/レポート/クエリ/モジュール)とバックエンド(テーブルのみ)に分割してはならないことを最も些細なはありません。適切に設計されたフロントエンドは決して一定の割合を超えて膨らむことはなく、圧縮する必要はありません。圧縮が必要なのはデータテーブルだけです。 COMPACT ON CLOSEは、フロントエンドだけでデータを圧縮しないので、無駄です。

  2. バックエンドでオンにしている場合は、データを失う可能性があります。これはJet/ACEのいくつかの形式の破損が問題なくデータを使用できるようにするためですが、圧縮するとすぐにデータが失われます。したがって、コンパクトにする前に、コンパイル後に破損したレコードが失われたため、表には100レコード、コンパクト後には98レコードがある可能性があります。これは一般的に気付かれることなく行われるため、COMPACT ON CLOSEは、ファイルを破棄するとデータを失う可能性があるため、ファイルを取り消すことができずに圧縮するという非常に危険な状況に陥ります。

COMPACT ON CLOSEを使用しないでください。それは価値がなく危険です。

0

すべてのフォームを閉じ、コマンドウィンドウからdocmd.quitを実行して、同じ動作をするかどうかを確認してください。

もしそうでなければ、フォームが閉じられたときに実行されるフォームのティアダウンコードかもしれません。この種のコードが無限ループになったり、周期的な依存関係を持つオブジェクトにティアダウンの問題が発生する前に、私はそれを見てきました。

これが問題になる場合は、「Quit」ボタンをもう一度押してからフォームが破棄されたときに実行されるコードを検査するまで、一般的に開いている各フォームで上記の手順を繰り返します。

0

私の場合は、アクセスを終了させないように思われる「CurrentDb」の使用でした。私は、アプリケーションのような...

Set goDbs = CurrentDb 

そしてその後、私はCurrentDbを必要whereever「goDbs」を使用しての開始時にグローバル変数に置き換えたら、問題は、なぜ知っているが、それが解決していない...去っていきました私の問題。

関連する問題