2013年8月14日

入力画面項目チェックのロジックの提案[初心者向け]

 画面入力値のチェックをするときに、1項目ずつチェックをすると思います。
その場合、入力チェック用の関数などを作ってチェックをすると思います。
 その場合の構造の提案です。
例としてMS Accessで考えてみます(なんでもいいんですが)

■仕様


  1. 会員ID、会員名、会員住所の必須入力チェックを行う。
  2. 入力チェックは、入力項目のエラーがあったら、それ以降の項目のチェックは行わない。
  3. エラーのあった項目にフォーカスをあてる

■画面イメージ

  会員ID [         ]
  会員名 [               ]
  会員住所 [               ]

■ロジック

Private Sub 登録_Click()

    If 入力チェック() Then
        ' エラー
        Exit Sub
    End If

    ' 登録処理をここに実装


End Sub

' True..エラーなし False..エラーあり
Private Function 入力チェック() As Boolean
   
    Dim msg As String
    Dim error_item as Control

    Do
        '
        ' 会員ID必須入力チェック
        If IsNull(会員ID) Then
            msg = "会員IDは、必須入力です"
            Set error_item = 会員ID
            Exit Do
        End If
        '
        ' 会員名必須入力チェック
        If IsNull(会員名) Then
            msg = "会員名は、必須入力です"
            Set error_item = 会員名
            Exit Do
        End If
        '
        ' 会員住所必須入力チェック
        If IsNull(会員住所) Then
            msg = "会員住所は、必須入力です"
            Set error_item = 会員住所
            Exit Do
        End If
    Loop Until True
   
    if msg = "" Then
        入力チェック = False
    Else
        入力チェック = True
        MsgBox msg, vbExclamation Or vbOkOnly, "入力エラー"
        error_item.SetFocus
    End If

End Function

■ポイントと解説

あまり考えないと、各項目エラーチェックをするかどうかを以前の項目でエラーがあったかのフラグを立ててチェックを行うと思います。

 ですが
 エラーがあったら、エラーメッセージのセットとエラーのあった項目の保存をしてエラーチェックを一気に抜け、仕様のとおり、それ以降の項目チェックを行いません。
 ロジックの赤字のところがポイントです。

 Do Loopは、ループがしたいわけではなく、それ以降のロジックを実行したくないためにブロック構造を作り出すために使っています。

 メリットとしては、以下のことがあります。

  • 各入力項目は、他のエラー状態を考える必要がない
    (ということは、入力チェックをする項目が増えた場合は、そのことだけを記述すればよい)
  • フォーカスのセッとメッセージ表示トロジックが1箇所にまとめられる
  • 余計な変数を作る必要がない(弱い理由ですが)

これで、ちょっと改造しやすくて、わかりやすいプログラムができるのではないでしょうか?






0 件のコメント:

コメントを投稿