ユーザーが商品IDを入力すると、それをキーにしてテーブル「商品_mr」から該当するレコードを抽出し、品名と販売単価を表示します。
この処理は、商品IDを入力するテキストボックス“txtItemId”がフォーカスを失ったとき(入力後にユーザーがTabキーを押すなどして他のコントロールに移動したとき)に実行します。顧客を特定する場合と同じで、Changeイベントを処理してはいけません。1文字入力するたびにプロシージャが呼び出されるため、何度もエラーメッセージが表示されてしまいます。
- 売上情報の入力~txtItemId_LostFocus -
実際のレコード抽出と結果の表示は、引数にSQLを与えて下請けプロシージャ“SearchItem”を呼び出します。
Private Sub txtItemId_LostFocus _
(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles txtItemId.LostFocus
Dim strSql As String
↓商品情報を抽出するためのSQL
strSql = _
"SELECT 品名, 販売単価 FROM 商品_mr " & _
"WHERE 商品ID = " ---- この後ろに入力された商品IDを連結
↓商品IDが未入力ならエラーメッセージを表示
If Me.txtCstmId.Text = "" Then
MessageBox.Show("商品IDを入力してください。", _
"入力エラー", MessageBoxButtons.OK)
Else ↓SQLにパラメータを付け足す
strSql = strSql & txtItemId.Text
SearchItem(strSql) ---- 下請けプロシージャを呼び出す
End If
End Sub
- 商品情報を表示~SearchItem -
Subプロシージャ“txtItemId_LostFocus”から呼び出され、引数のSQL文を使ってテーブル「商品_mr」から該当する商品のレコードを抽出して、品名と販売単価をラベルに表示します。併せて、グローバル変数“SlipData”の各メンバにも値を代入します
接続文字列の設定やデータベースのオープン処理などは、既に何度も説明してきたので割愛します。SQLの結果セットはDataReaderオブジェクトに受け取ります。
商品情報の入力で品名や販売単価が未入力となることは考えられないので、テーブル「商品_mr」にNULL値を持つフィールドは存在しないのが普通ですが、ここでも(前回紹介したように)NULL値対策としてIf命令でフィールドの値を調べ、NULL値(DBNull)なら空文字列("")に変換するようにしています。
販売単価は数値なので、ラベル“lblItemValue”に表示する前にFormat関数で3桁ごとのカンマ(,)を挿入するよう書式化しています。
Private Sub SearchItem(ByVal strSql As String)
Dim objConnect As New SqlConnection
Dim objCommand As New SqlCommand
Dim objDataReader As SqlDataReader
Try
: (オープン処理などは省略)
↓引数のSQLを設定
objCommand.CommandText = strSql
objDataReader = _
objCommand.ExecuteReader(CommandBehavior.SingleRow)
If objDataReader.Read() Then ---- レコードが抽出された場合
↓NULL値(DBNull)なら空文字列に変換する
If Not IsDBNull(objDataReader("品名")) Then
lblItemName.Text = objDataReader("品名")
Else
lblItemName.Text = ""
End If
If Not IsDBNull(objDataReader("販売単価")) Then
↓書式化して表示
lblItemValue.Text = _
Format(objDataReader("販売単価"), "#,##0")
Else
lblItemValue.Text = ""
End If
SlipData.strItemName = lblItemName.Text
SlipData.intItemValue = CInt(lblItemValue.Text)
Else ---- 該当レコードが存在しない場合
MessageBox.Show( _
"該当する商品が見つかりません。", _
"検索エラー", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
InitForm()
txtItemId.Text = ""
txtItemId.Select()
Exit Sub
End If
: (例外処理などは省略)
End Try
|
|
|