2017-02-14 14 views
1

ソリューションアクセス入力フォーム

ソリューションがしようとするとエラーを捕捉しますが追加新規レコードのコマンドボタンの一部として自分自身をエラー処理をしないことだった。

Private Sub buttonNewRecord_Click() 

Dim ErrorInt As Integer 
Dim TeleCheck As Variant 

Name.SetFocus 
If Name.Text = "" Then 
MsgBox "Name is missing!" 
ErrorInt = ErrorInt + 1 
End If 

TeleCheck = DLookup("[Telephone]", "tblColdCallLog", "[Telephone] = '" & Me.Telephone & "'") 
If Not IsNull(TeleCheck) Then 
MsgBox "Telephone number already exists in the table!" 
ErrorInt = ErrorInt + 1 
End If 

If ErrorInt < 1 Then 
DoCmd.GoToRecord , , acNewRec 
MsgBox "Record Added!" 
End If 

End Sub 

オリジナルのポスト:私が持っているもの

私はCを持っていますテーブルにデータを入力するためのシンプルなAccess 2013フォームを改訂しました。フォーム上で、ユーザーはフィールドにデータを入力し、コマンドボタンウィザードを使用して新規レコードを追加するボタンをクリックします。

フォームには、[名前]と[インデックス:はい(重複なし)]、[電話番号]の1つの必須フィールドがあります。フォームでは、[Name]フィールドが空であるか、テーブルにある[Telephone]フィールドに重複番号が検出された場合、エラーメッセージが正しく出力されます。

は私がやろうとしてる何:

表示されるエラーメッセージは、ユーザーフレンドリーではありません。私はカスタムエラーメッセージでそれらを置き換えたいと思います。エラーがなければ、おそらくすべてがうまくいったというメッセージでしょう。フォームのプロパティで

を、[イベント]タブを、「エラーオン」で、[イベントプロシージャ]:私が試したものを

Private Sub Error_Sub(DataErr As Integer, Response As Integer) 
    If DataErr = 3022 Then 
    MsgBox "Duplicate telephone number found in table!" 
    Response = acDataErrContinue 
    End If 
    If DataErr = 3314 Then 
    MsgBox "Name is missing!" 
    Response = acDataErrContinue 
    End If 
End Sub 

これは動作しますが、フォームを閉じるときにのみ... '新しいレコードの追加'コマンドボタンをクリックすると、必要に応じてデフォルトのエラーメッセージが表示されます。

"Before Update"イベントを使用する必要がありますか?私は同じVBAスクリプトを使用することはできません。 DataErrまたはResponseを定義することは許可されていません。だから、代わりに式を使用します:

=IIf(Error(3022),MsgBox("Duplicate telephone number found in table")) 
=IIf(Error(3314),MsgBox("Name is missing")) 

これは動作しますが、エラーがないときに機能します。 [Name]フィールドに名前があっても、エラーが表示されますが、少なくともデフォルトのエラーメッセージが置き換えられます。

ボタン自体に入れてみましょうか?私はそれを編集するためにマクロビルダを使用する必要があります。これは、これをコピーして貼り付けることが少し難しいので、私は簡素化されます:

OnError GoTo Error_Handling 
GoToRecord New 
If [MacroError]<>0 Then 
    MsgBox = "[MacroError].[Description]" 
End If 

Error_Handling: 
If Error(3022) Then 
    MsgBox = "Duplicate telephone number found in table!" 
End If 
If Error(3314) Then 
    MsgBox = "Name is missing!" 
End If 

これは、イベント「アップデートの前に」と同じん。デフォルトのエラーメッセージを置き換えますが、最初にエラーメッセージをトリガするかどうかは関係ありません。

私は間違っていますか?私はそれが本当に簡単な何かの感覚を得る。私はさまざまな組み合わせと無限のグーグルを試みましたが、私は困惑しています。

+1

レコードを追加するときは、ほとんどの場合、アンバウンドフォームを使用し、パラメータを指定して更新クエリを実行する前に、必要な各コントロール(フィールド)をチェックします。これはスケーラブルです。 – Fionnuala

+1

最良の選択肢は入力エラーを防ぐことです。フォームのBeforeUpdateイベントで、または可能であれば、個々のコントロールのBeforeUpdateイベントまたはAfterUpdateイベントで行います。次に、フォームのエラー処理で、他のエラー(通常はユーザーコントロールからのエラー)が処理されるようにします。 – Gustav

+0

ありがとうございます。グスタフが私を正しい軌道に乗せた。エラーをキャプチャするのではなく、[新しいレコードを追加]ボタンの一部としてエラー処理を記述しました。ソリューションはOPに追加されました。 – ETP

答えて

0
Private Sub buttonNewRecord_Click() 

Dim ErrorInt As Integer 
Dim TeleCheck As Variant 

Name.SetFocus 
If Name.Text = "" Then 
MsgBox "Name is missing!" 
ErrorInt = ErrorInt + 1 
End If 

TeleCheck = DLookup("[Telephone]", "tblColdCallLog", "[Telephone] = '" & Me.Telephone & "'") 
If Not IsNull(TeleCheck) Then 
MsgBox "Telephone number already exists in the table!" 
ErrorInt = ErrorInt + 1 
End If 

If ErrorInt < 1 Then 
DoCmd.GoToRecord , , acNewRec 
MsgBox "Record Added!" 
End If 

End Sub