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

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

レコードの追加処理(4)~実際の追加処理

INSERT INTO命令を発行して実際にレコードを追加する処理では、CommandTextに設定するSQL文字列の設定が複雑になります。


- SQLの記述に注意 -

[追加]ボタン“btnInsert”のClickイベントで、実際のレコード追加処理を実行します。レコードの追加処理では、INSERT INTO命令を用います。書式を確認しておきましょう。

  INSERT INTO <テーブル名> (<フィールドリスト>)
  [VALUES(<値リスト>)]

ここでは、「商品ID」「品名」「販売単価」「仕入単価」「仕入先ID」の各テキストボックスに入力された値を各フィールドに設定します。SQLは以下のようになります。

strSql = _
"INSERT INTO 商品_dmy " & _
"(商品ID, 品名, 販売単価, 仕入単価, 仕入先ID) " & _
"VALUES(" & _
txtItemId.Text & ", " & _
"'" & txtItemName.Text & "', " & _ ←文字列型なので' 'で囲む
txtBuyPrice.Text & ", " & _
txtSalePrice.Text & ", " & _
txtSupplierId.Text & ")"

文字列定数と変数(テキストボックスのTextプロパティ)とを「,」でつないで1つのSQL文字列とするため、文字列連結演算子“&”を多用します。フィールド名の順序と変数の順序を間違えないようにしましょう。

なおSQLでは、文字列型(varcharなど)フィールドに設定する値は' 'で囲まなければなりません。そのため、「品名」フィールドに設定する“txtItemName”の箇所がやや複雑な形となります。


- 重複検査の結果をチェック -

続いてSQLを実行すればよいのですが、このとき「商品IDの重複検査」で「重複なし」となっていない場合(グローバル変数“IsOverlar”がTrueの場合)には、追加処理を行わないようにします。

↓「重複あり」または「商品ID未入力」ならSQLを実行しない
If (IsOverlap = True) Or (txtItemId.Text = "") Then
  MsgBox("先に商品IDの重複検査を行ってください。", MsgBoxStyle.OKOnly, "追加エラー")
  Exit Sub
End If


- SQLを実行 -

ユーザーにレコード追加の確認を求めたあと、“CommandText”にSQLを設定して“ExecuteNonQuery”メソッドを実行します。

Try
            :
接続文字列の設定など
       :
objConnect.Open()
objCommand.CommandText = strSql
↓SQLを実行
If objCommand.ExecuteNonQuery >= 1 Then
  MsgBox("商品を追加しました。", MsgBoxStyle.OKOnly, "追加完了")
  InitForm() ' 再実行に備えてテキストボックスとグローバル変数を初期化
Else ---- 追加に失敗した場合
  MsgBox("商品を追加できませんでした", MsgBoxStyle.OKOnly, "追加エラー")
  Exit Sub
End If
       :
End Try


- 実行結果を確認する -

これで、新規商品の追加処理が出来上がります。ソースの全体は“ex02Source.txt”をご覧ください。

完成したアプリケーションの動作は、画面6~画面10のようになります。




レコード追加の確認メッセージ
画面9:レコード追加の確認メッセージ



あとがき

- マスターテーブル保守処理のユーザーインターフェイス -

例として紹介した「マスターテーブルの保守処理」は、実際にはもっとユーザーに親切なインターフェイスとした方が望ましいでしょう。ここで紹介した仕様は、SQLの実行部分を確認していただくことを目的としたため、細部のインターフェイス設計にはこだわっていません。

商品点数が少なければ、ユーザーはディスプレイを見ながらキーボードから情報を入力することになります。そのような場合、削除や更新では「商品ID」ではなく品名の一部をキーにLike演算子を使った曖昧検索でレコードを特定する方が親切です。

しかし、大量の商品を扱う場合には、OCR(光学文字読み取り)やバーコードリーダーで必要な情報を連続入力することになります。そのようなときには曖昧検索処理を省き、IDをキーにするだけの方が効率的です。但し、正しく処理できなかったときに「エラーログ」を記録する必要があります。

雑誌や書籍のサンプルでは、読者がサンプルを自分のパソコンで試すことを前提としているため、エラーメッセージはメッセージボックスで表示して、[OK]ボタンのクリックで処理を続行――という形が多くなります。しかし実際の業務処理では、テーブルの書き換えなどでデータベース側にエラーが発生した場合、正しく追加や更新のできなかった情報をエラーログとしてテキストファイルなどに書き出し、最後にそれをプリントアウトするのが一般的です。

こういった業務処理のためのユーザーインターフェイスについては、データベースやSQLとは直接関係のない話題となるため、別の機会に触れることとします。あしからずご了承ください。


Downloadサンプルファイル (LZH形式 35KB)



トップページ
フィールドの更新処理(1)~SQLとアプリの仕様
フィールドの更新処理(2)~ソースコードの記述
レコードの追加処理(1)~SQLとアプリの仕様
レコードの追加処理(2)~商品IDの重複検査
レコードの追加処理(3)~仕入先名の表示
レコードの追加処理(4)~実際の追加処理
SQLの記述に注意
重複検査の結果をチェック
SQLを実行
実行結果を確認する
あとがき
Copyright © GrapeCity inc. All rights reserved.