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

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

全体の仕様を把握する

今回のサンプル・アプリケーションでは、顧客からの注文(商品と数量)を次々とテーブルに記録していきます。まず、全体の仕様を把握しておきましょう。


- アプリケーションの概要 -

アプリケーションの構造は、大きく2つに分かれます。

a.顧客を特定して伝票番号を生成する
b.顧客の注文した複数の商品と数量をテーブルに記録する

処理全体が複雑になるため、今回は「a.顧客を特定して伝票番号を生成する」について紹介します。「b.顧客の注文した複数の商品と数量をテーブルに記録する」については、次回紹介します。


- データアクセスにコントロールを使わない理由 -

ソースコードが長くなる理由は、処理自体が複雑になることもありますが、今回のアプリケーションではデータベースの制御にGUI化されたコンポーネント――コントロールを使わず、すべてソース中でコンポーネントを生成しているためでもあります。

Visual Studio .NETではデータアクセス用のコントロールをフォームに貼り付け、プロパティを設定していけば簡単にデータベースを扱う処理が作れます。しかし、それではデータアクセス・オブジェクトの機能も肝心のSQLとの関係も、よく分からないままアプリケーションが出来上がってしまいます。確かに便利ですが、それでは意味がありません。

また、コントロールを使うことでリソースを余分に消費し、内部のオーバーヘッドによって処理速度が(多少)低下することも考えられます。加えて、コントロールのプロパティ設定では、仕様変更に対してあとからSQLを書き換えるなどの小回りも利きづらくなります。

ソース中でオブジェクトを生成し、文字列としてSQLを明示的に与えることで、ソースは長くなりますが、コンパクトかつ高速でメンテナンス性も高いアプリケーションが作れます。


- アプリケーションの仕様 -

アプリケーションの具体的な仕様を紹介しておきましょう。

a.顧客を特定して伝票番号を生成する

   a-1.顧客の特定
ユーザーがお客様IDを入力すると、それをキーにしてテーブル「顧客_mr」からレコードを抽出し、該当する顧客の氏名や住所などを表示します。

a-2.伝票番号の生成
上記処理と同時に「日付+連番」形式の伝票番号を生成します。

a-3.レコードの追加
伝票番号、処理日付、お客様IDを、テーブル「売上ヘッダ」に1件のレコードとして追加します。

「売上ヘッダ」は売上(受注)情報の基本部分だけを記録するテーブルです。受注した商品とその数量は、テーブル「売上明細」に記録します。EnterpriseManagerでデータベース“db1001ya”のテーブル「売上ヘッダ」と「売上明細」のデザインを確かめておきましょう(後段の《注意》を参照してください)。

b.顧客の注文した複数の商品と数量をテーブルに記録する

   b-1.商品の特定
ユーザーが商品IDを入力すると、それをキーにしてテーブル「商品_mr」から該当するレコードを抽出し、品名と販売単価を表示します。

b-2.数量の入力
上記の処理で特定された商品の受注数量を入力すると、数量と販売単価を乗算して合計金額を表示します。

b-3.1件の追加
[追加]ボタンをクリックすると、品名と数量、合計金額をテーブル「売上明細」に1件のレコードとして追加し、画面下部のグリッドに受注した商品の明細を表示します。

以降、b-1~b-3の処理を、1人の顧客から受注した商品の件数分繰り返します。






- 2つのテーブルの関係 -

この処理では、日付と顧客の情報(いつ・誰が)をテーブル「売上ヘッダ」に、販売した商品の情報(何を・何個)をテーブル「売上明細」に分けて記録します。1人の顧客が3種類の商品を注文すれば、「売上ヘッダ」には1件、「売上明細」には3件のレコードが記録される――ということです。

2つのテーブルの情報は、伝票番号を共有することで結び付けられます。


【注意】
サンプル・データベース“db1001ya”のテーブル「売上ヘッダ」は、初期状態(ダウンロードした直後の状態)で「伝票番号」フィールドが“IDENTITY”に指定されています。この状態だとアプリケーションから伝票番号の値を書き換えられないため、IDENTITY指定を解除しておいてください。

具体的には、以下のように操作します。

1.  EnterpriseManagerでデータベース“de1001ya”を開く
2.  テーブルの一覧から“売上ヘッダ”を選択する
3.  右クリックでコンテキストメニューを表示して「テーブルのデザイン」を選択する
4.  「伝票番号」フィールドを選択する
5.  「プロパティ」で“IDENTITY”欄を「いいえ」に変更する

これでテーブルへの変更を保存すれば、「伝票番号」フィールドの値をアプリケーションから書き換えられるようになります。




トップページ
全体の仕様を把握する
アプリケーションの概要
データアクセスにコントロールを使わない理由
アプリケーションの仕様
2つのテーブルの関係
フォームのデザイン
データの準備
下請け処理~コントロールと変数の初期化
伝票番号の生成
顧客情報と伝票番号の表示
レコードの追加~AddHeader
あとがき
Copyright © MESCIUS inc. All rights reserved.