データベース千夜一夜第15回

プログラミングとSQL(3)
~フィールドの更新とレコードの追加処理
長谷川裕行
有限会社 手國堂

レコードの追加処理(3)~仕入先名の表示

仕入先に関して「仕入先ID」のみが記録され、あとはリレーションをたどってその他の情報を取得します。商品の追加時に仕入先IDを入力したら、そのIDが示す仕入先の名称を表示できるようにしておきます。


- 基本は検索処理 -

テキストボックス“txtSupplierId”に仕入先IDが入力されたら、テーブル「仕入先_mr」から該当するレコードを抽出して「仕入先名」をラベル“lblSupplier”に表示します。

この処理も、SELECT命令を使ってレコードを抽出し、その結果をDataReaderオブジェクトに保存するという基本的な形です。

この処理は、テキストボックス“txtSupplierId”がフォーカスを失ったとき(LostFocusイベントが発生したとき)に実行します。仕入先IDは半角の数字なので、内容が変更されたときに発生するChangeイベントに対応させると、IDを1文字入力するたびにプロシージャが実行されてしまいます。


- SQLも基本形で -

テキストボックス“txtSupplierId”に入力された値をWHERE句の条件に設定したSQLをString型変数“strSql”に代入し、CommandオブジェクトのCommandTextに設定します。

strSql = _
"SELECT 仕入先ID, 仕入先名 FROM 仕入先_mr " & _
"WHERE 仕入先ID = " & txtSupplierId.Text

Try
            :
接続文字列の設定など
       :
objConnect.Open()

↓引数のSQLを設定
objCommand.CommandText = strSql


- 抽出結果を表示 -

DataReaderのReadメソッドでSELECT命令を実行し、レコードが存在すればその「仕入先名」フィールドの値をラベル“lblSupplier”に表示します。存在していない場合は「仕入先ID」の再入力を促すため、ラベルに「???」と表示した後、テキストボックス“txtSupplierId”にフォーカスを移動し、入力されている文字列を選択状態にします。

     objDataReader = objCommand.ExecuteReader(CommandBehavior.SingleRow)
If objDataReader.Read() Then ' 仕入先が存在すればラベルに表示
  lblSupplier.Text = objDataReader("仕入先名")
Else ' 仕入先が存在しないとき
  lblSupplier.Text = "???"
  ' フォーカスを「仕入先ID」に戻す
  txtSupplierId.Focus()
  txtSupplierId.Select(0, Len(txtSupplierId.Text))
End If
       :
End Try



トップページ
フィールドの更新処理(1)~SQLとアプリの仕様
フィールドの更新処理(2)~ソースコードの記述
レコードの追加処理(1)~SQLとアプリの仕様
レコードの追加処理(2)~商品IDの重複検査
レコードの追加処理(3)~仕入先名の表示
基本は検索処理
SQLも基本形で
抽出結果を表示
レコードの追加処理(4)~実際の追加処理
あとがき
Copyright © MESCIUS inc. All rights reserved.