PR

Accessによる在庫管理 その3 フォームの設計(入庫処理)

フォーム

前回までに、データの保存先であるテーブルの構造について紹介をしてきました。
今回は、ユーザーが効率良くデータ入力をできるようにフォームの設計をしていきます。ポイントは、いかに少ない作業量で適切なデータを登録できるようにするかという点です。

まず、効率良く入庫及び出庫データの登録在庫情報の確認をできることを目的とします。
さらに、テーブルとフォームを直接リンクはせずに、フォーム上に入力した情報をもって整合性等の確認を行い、異常がなければテーブルに登録する仕組みを設けることとし、VBAによりソースコードを記述することで実現化します。

また、フォームの作成方法(今回作成するフォームの名称は「F_メイン」とします。)、VBAを利用したフォームの操作については以下の記事をご参照ください。

スポンサーリンク

入庫データ登録画面の設定

入庫データを登録するためのオブジェクトを配置します。ここで、これまでに作成した「T_入庫」テーブルにおいて、「入庫ID」フィールドはオートナンバー型であり、レコード情報が追加されると自動で付番されるため、フォーム上での設定は不要です。
入庫登録日はレコード登録を実施した日を自動で入力するようにします。
また、品目情報と担当者情報は、フォーム上にリストを表示させて、選択できるようにします。
以上の要件をフォームに実現していきましょう。

図1 入庫データ登録向けフォームの配置

図1に示すように、フォームデザインからテキストボックス、コンボボックス及びコマンドボタンを配置します。

なお、入庫数を入力するテキストボックスを「t_入庫数」、品目情報を入力するコンボボックスを「t_品目情報」、担当者情報を入力するコンボボックスを「t_担当者情報」という名称にします。また、入庫処理を開始するためのコマンドボタンを「cmd_入庫処理」という名称にします。

次に、ユーザーがコンボボックスで情報を選択、入庫数をテキストボックスに入力し、コマンドボタンをクリックした段階で、VBAによる処理が開始するようにします。繰り返しますが、入庫登録日はレコードを追加する際にVBA側で自動で情報を登録するようにします。

VBAソースコード 入力内容の確認

「cmd_入庫処理」コマンドボタンのクリックを、入庫処理の開始イベントとします。まず、「cmd_入庫処理」コマンドボタンを右クリックし、プロパティを開き「クリック時」の項目で「イベントプロシージャ」を設定します。この状態で「…」ボタンをクリックすると、VBA画面が起動します(図2参照)。

図2 VBA画面

まずは、品目情報、入庫数、 担当者情報が入力されているかの確認をします。次のようにソースコードを記述します。

Public Sub cmd_入庫処理_Click()

'以下のIf文を追記する。
'品目情報が入力されていないと処理中止
If Me.t_品目情報 = "" Or IsNull(Me.t_品目情報) Then    'Nullか未入力かどちらかで処理中止
    MsgBox "品目情報が選択されていません。"
    Exit Sub
'入庫数が入力されていないと処理中止
ElseIf IsNumeric(Me.t_入庫数) = False Then
    MsgBox "入庫数が正しく入力されていません。(半角数字で入力)"
    Exit Sub
'担当者情報が入力されていないと処理中止
ElseIf Me.t_担当者情報 = "" Or IsNull(Me.t_担当者情報) Then
    MsgBox "担当者情報が選択されていません。"
    Exit Sub
End If

End Sub

これにより、不適切なデータ入力されていると処理を中止します。

フォーム上での入力内容に不備がなければ、T_入庫テーブルにデータを登録していきます。まずは、参照設定(VBA画面のツールタブ中)を開き、Microsoft ActiveX Data Objects 6.1 Libraryにチェックを入れます(最新のバージョンがあれば、そちらにチェックをしてください。)。続いて、ADOを用いて、データ登録を行いますので、先に入力したソースコードの下に以下のソースコードを追記してください。

Public Sub cmd_入庫処理_Click()

 '品目情報が入力されていないと処理中止
 If Me.t_品目情報 = "" Or IsNull(Me.t_品目情報) Then    'Nullか未入力かどちらかで処理中止
     MsgBox "品目情報が選択されていません。"
     Exit Sub
 '入庫数が入力されていないと処理中止
 ElseIf IsNumeric(Me.t_入庫数) = False Then
     MsgBox "入庫数が正しく入力されていません。(半角数字で入力)"
     Exit Sub
 '担当者情報が入力されていないと処理中止
 ElseIf Me.t_担当者情報 = "" Or IsNull(Me.t_担当者情報) Then
     MsgBox "担当者情報が選択されていません。"
     Exit Sub
 End If

'以下のソースコードを追記する。
 Dim cn As New ADODB.Connection
 Dim rs As New ADODB.Recordset
 'カレントデータベースへの接続

 Set cn = CurrentProject.Connection

 'T_入庫テーブルを開く
 rs.Open "T_入庫", cn, adOpenKeyset, adLockOptimistic

 'レコードセットの登録(フィールド指定は、rs!~と記載する。)
 rs.AddNew
 rs!入庫数 = Me.t_入庫数  'rs!~: 対象テーブルのフィールド名を指定する。
 rs!入庫年月日 = Now()
 rs!品名 = Me.t_品目情報
 rs!担当者 = Me.t_担当者情報
 'Updateで情報登録が完了する。
 rs.Update

 'テーブルを閉じる。
 rs.Close

'T_在庫テーブルを開く
 rs.Open "T_在庫テーブル", cn, adOpenKeyset, adLockOptimistic

 'レコードセットの登録(フィールド指定は、rs!~と記載する。)
 rs.AddNew
 rs!在庫数 = Me.t_入庫数    '入庫は在庫に対してプラスの処理。
 rs!在庫年月日 = Format(Now(), "yyyy/mm/dd")  '時間情報は登録しない。
 rs!品名 = Me.t_品目情報
 'Updateで情報登録が完了する。
 rs.Update

 'テーブルを閉じる。
 rs.Close

 'データベース接続を閉じる。
 cn.Close

 'ガーベージコレクション
 Set rs = Nothing
 Set cn = Nothing

 MsgBox "処理を完了しました。"

 End Sub

以上のソースコードを記入後、早速データ登録を行いましょう。

入庫情報の登録

これまでに作成したフォームを用いて、「T_入庫テーブル」及び、「T_在庫テーブル」に情報を登録してみましょう。まずは、図3に示すように、フォーム上でデータを入力します。

図3 入庫情報の登録

続いて、「入庫登録」コマンドボタンをクリックすると、処理が開始され、最終的に「処理を完了しました。」というメッセージボックスが表示されます。

この後に、「T_入庫テーブル」及び「T_在庫テーブル」を確認すると、先ほどフォーム上に入力したデータが反映されていると思います。

まとめ

今回は、在庫管理をするデータベースの入庫情報登録に係るフォームの作成方法について、紹介をしました。ADOを用いた処理、If文を用いた入力データの妥当性確認について、紹介をしました。その他にも、データ登録前の処理ルーチンにより、詳細なデータ評価を行うことも可能です。

次回は、出庫に係る処理方法について紹介をいたします。

スポンサーリンク

Kindle Unlimitedにサインアップして無料体験に登録する
Kindle Unlimitedに登録すると、人気のシリーズ、ベストセラー、名作などに好きなだけアクセスして、シームレスなデジタル読書体験を実現できます。

コメント

タイトルとURLをコピーしました