2016-06-01 2 views
1

私はMS Accessデータベースとそのフォームを更新することが任されています。 各フォームはクエリにリンクされているようです。フォーム上のテキストボックスにデータを入力し、レコードの保存ボタンを押さずにフォームを閉じると、新しいレコードがデータベースに追加され、意味をなさないことになります。MS Access - フォームに入力されたデータフォームを閉じると自動的に保存されます

私はプログラマーですが、アクセスフォームとデータベースでの作業経験はほとんどありません。

ありがとうございました。

答えて

4

Microsoft Accessは、既定でフォームをデータにバインドし、レコード間を移動するか、作業中のフォームを閉じると自動的にデータを保存します。普通のユーザーにとっては、編集後に誤ってフォームを閉じたとしても、データを失うことが非常に困難になるため、これは実際には良いことです。

この機能を探していない場合は、フォームからバインディングを削除すること、つまりレコードソースプロパティを空白に設定してから、バインドされていないコントロールを使用してコード内のすべてのデータを操作することをおすすめします。それははるかに面倒ですが、より多くのコントロールを提供します。

もう1つのオプションは、フォームのBeforeUpdateイベントを使用して、変更を保存するかどうかをユーザーに問い合わせてから、変更を許可することです。

主な関心事が誤って新しいレコードを追加している場合は、Allow Additionsプロパティをfalseに設定し、プログラムで新しいレコードを作成します。

BeforeUpdateイベントプロシージャ(同じコードがBeforeInsertイベントのために働くだろう)のサンプル:

Private Sub Form_BeforeUpdate(Cancel As Integer) 

    Dim intAns As Integer 

    intAns = MsgBox("Are you sure you want to save this record?", vbQuestion + vbYesNo, "Save Record") 
    If intAns = vbNo Then Cancel = 1 

End Sub 

あなたは上記の方法を使用した、ユーザーが「いいえ」をクリックした場合、彼らが持っているでしょうESCキーを押して、入力した変更を元に戻します。さもなければ、彼らはレコードを離れて移動したときにダイアログを表示し続けるでしょう。

+1

本当にありがとうございました。私が理解しようとしていたものです。あなたが言及したBeforeUpdateメソッドを使用するかもしれません。再度、感謝します! – JasonR

+0

BeforeUpdateフラグを使用する場合、そのイベントを使用してDBに新しいデータを追加する最も良い方法は何でしょうか? – JasonR

+0

私は、役立つかもしれないBeforeUpdateイベントプロシージャのサンプルを追加しました。 BeforeInsertイベントプロシージャに同じコードを使用すると、新しいレコードを追加する前にユーザーに確認することができます。どちらの場合も、ユーザーが「いいえ」を選択した場合、ESCキーを使用して変更を元に戻すまで、レコードから移動することはできません。 新しいレコードを追加する場合は、コマンドボタンを使用して一時的にフォームのDataEntryプロパティをtrueに変更することを検討してください。それを正しくすることはもう少し複雑です。 – Billious

関連する問題