仕入先に関して「仕入先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 |
|
|
|