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

プログラミングとSQL(4)
~販売データの入力処理(前編)
長谷川裕行
有限会社 手國堂

レコードの追加~AddHeader

イベントプロシージャ“txtCstmId_LostFocus”から呼び出されるFunctionプロシージャ“AddHeader”は、確定した伝票番号、日付、お客様IDを「売上ヘッダ」に1件のレコードとして追加します。使用するSQL命令はINSERT INTOです。


- オブジェクト変数とSQLの準備 -

データベースを扱うオブジェクト変数とSQL用の文字列変数を用意するところは、これまでと同じです。

  Private Function AddHeader() As Boolean
       Dim objConnect As New SqlConnection
Dim objCommand As New SqlCommand
Dim strSql As String

レコード追加用のSQLは以下のようになります。
       strSql = _
"INSERT INTO 売上ヘッダ " & _
"(伝票番号, 伝票日付, お客様ID, 伝票発行) " & _
"VALUES(" & _
strSlipNumber & ", '" & _
Customer.strDate & "', " & _
txtCstmId.Text & ", " & "0)"

VALUES句に続く()内では、伝票番号にグローバル変数“strSlipNumber”、日付に構造体変数“Customer”のメンバ“strDate”、お客様IDにはテキストボックスtxtCstmIdの値を列挙しています。ちなみに、日付にはtxtData.Textを使っても構いません。

接続文字列の設定からSQLの設定までは、これまでに紹介してきた流れと同じなので省略します。

       Try
     ' 接続文字列の設定
              :
objCommand.CommandText = strSql

レコードの追加には、CommandオブジェクトのExecuteNonQueryメソッドを使います。戻り値は追加された件数なので、1以上なら成功と見なしてTrueを、そうでなければ失敗と見なしてFalseを返すようにしています。

           If objCommand.ExecuteNonQuery >= 1 Then
    AddHeader = True
Else
    AddHeader = False
    Exit Function
End If

これ以降の例外処理と接続を閉じる処理は、これまでに紹介したものと変わらないため省略します。


あとがき

今回のサンプルはかなり簡略化しましたが、それでもこれまでの単純なレコードの抽出や追加処理に比べてソースコードが長く、処理も複雑になっています。そのため、今回は顧客情報を記録するところまでを紹介することにします。

商品情報の入力とグリッドへの明細表示、テーブル「売上明細」へのレコードの追加処理などは次回に取り上げますのでご了承ください。

サンプルのVBプロジェクトとソースコードも、今回は途中までとなっています。完全な処理はできませんがお客様IDを入力して情報を表示し、「売上ヘッダ」にレコードを記録するところまでは実行できます。

なお、次回に紹介するサンプルで再び「売上ヘッダ」へのレコード追加から処理を実行することになるため、今回のサンプルを試したら必ずEnterprise Manegerで「売上ヘッダ」の全レコードを表示し、それらを選択して削除しておいてください。そうしないと、次回のサンプルを試したときにレコード件数に矛盾が発生します(削除しなくても、処理自体への影響はありません)。


ソースコード (TXT形式 12KB)
Download サンプルファイル (LZH形式 35KB)




トップページ
全体の仕様を把握する
フォームのデザイン
データの準備
下請け処理~コントロールと変数の初期化
伝票番号の生成
顧客情報と伝票番号の表示
レコードの追加~AddHeader
オブジェクト変数とSQLの準備
あとがき
Copyright © MESCIUS inc. All rights reserved.