バックナンバー 第81号:VB2008 データベースプログラミング

VB 2008 Express Editiont と、SQL Server 2008 Express with Advanced Services を使って、フォームから入力した受注データを、受注ヘッダー表と受注ディテール表に登録する、受注伝票エントリープログラムを作成していきます。
受注伝票エントリー 第9回(得意先クラス)
第81号(2010.2.08発行)
====================================================================
       ★★ -- VB.NETデータベースプログラミング奮闘記 -- ★★
           (VB 2008 Express & SQL Server 2008 Express)
--------------------------------------------------------------------
いつもご購読ありがとうございます。ADO.NETの基本的なサンプルプログラ
ムをお届けします。

やさしいVB2008 ADO.NET → https://adonetvb.com/index.html
====================================================================
                ■■ 受注伝票エントリー 第9回 ■■

フォームから入力した受注データを、受注ヘッダー表と受注ディテール表に
登録するプログラムを作成します。

フォーム    → https://adonetvb.com/OrderEntry/index.html

テーブル定義  → https://adonetvb.com/OrderEntry/DB.html

バックナンバー → https://adonetvb.com/MailMagazine/index.html

--------------------------------------------------------------------
                         ■ 得意先クラス ■

今回は、得意先クラスの ClsTokuisakiを実装します。このクラスは、コン
ストラクタの引数に指定した得意先コードのレコードを得意先マスターから
取得して、プロパティから得意先名称や住所を取得できるようにするクラス
です。

まず、基本クラス(基底クラス)ClsTokuisakiBaseに、得意先マスター表の
選択・更新・削除・追加処理共通の定数変数メンバー、変数メンバー、得意
先名称プロパティ、販得意先住所プロパティ、得意先コードチェックメソッ
ドを実装します。抽象クラスにするので、コンストラクタは実装しません。

派生クラス(選択・更新・削除処理用)ClsTokuisakiは、コンストラクタと
読取専用の得意先コードプロパティを実装します。コンストラクタで、販売
管理データベースアクセスクラスClsHanbaiKanriDBIOのGetRowsDataメソッド
を呼び出します。

  ' 得意先マスター表からレコード取得
  Dim dbIO As New ClsHanbaiKanriDBIO( _
      TABLE_NAME, KEY_FIELD, tCode)
  Dim dt As DataTable = dbIO.GetRowsData()

得意先マスター表からレコードを取得し、取得後内部変数メンバーにセット
します。

クラスファイルClsTokuisaki.vbを追加して、ClsTokuisakiBaseと
ClsTokuisakiを実装します。

--【プログラムソースリスト:ClsTokuisaki.vb】--------------------------
Option Strict On
Imports System.Text.RegularExpressions

'%%%%%%%%%%%%%%% 基本抽象クラス:得意先データ %%%%%%%%%%%%%%
Public MustInherit Class ClsTokuisakiBase

    '-------------------[ 定数メンバー ]--------------------
    Protected Const TABLE_NAME As String = "得意先マスター表"
    Protected Const KEY_FIELD As String = "得意先コード"

    '-------------------[ 変数メンバー ]--------------------
    Protected tCodeValue As String         ' 得意先コード
    Protected tMeishoValue As String       ' 得意先名称
    Protected tJushoValue As String        ' 得意先住所

    '-------------------------------------------------------
    ' プロパティ:得意先名称
    '-------------------------------------------------------
    Public Property TokuisakiMeisho() As String

        ' Getプロパティ
        Get
            Return tMeishoValue
        End Get

        ' Setプロパティ
        Set(ByVal tMeisho As String)
            ' 未入力ならば、例外スロー
            If tMeisho.Length = 0 Then
                Throw New TokuisakiMeishoException _
                    ("得意先名称が未入力です")
            End If

            tMeishoValue = tMeisho

        End Set

    End Property

    '-------------------------------------------------------
    ' プロパティ:得意先住所
    '-------------------------------------------------------
    Public Property TokuisakiJusho() As String

        ' Getプロパティ
        Get
            Return tJushoValue
        End Get

        ' Setプロパティ
        Set(ByVal tJusho As String)
            ' 得意先住所が未入力ならば例外スロー
            If tJusho.Length = 0 Then
                Throw New TokuisakiJushoException _
                    ("得意先住所が未入力です")
            End If

            tJushoValue = tJusho

        End Set

    End Property

    '*******************************************************
    ' 機能:得意先コードのエラーチェックメソッド
    ' 引数:得意先コード
    ' 補足:エラーがあれば例外をスロー
    '*******************************************************
    Protected Sub CheckTokuisakiCode(ByVal tCode As String)

        ' 引数未設定チェック
        If tCode.Length = 0 Then
            ' 引数未設定は例外スロー
            Throw New TokuisakiCodeException _
                ("得意先コードが未入力です")
        End If

        ' 引数文字列チェック(数字のみで構成)
        If Not Regex.IsMatch(tCode, "^[0-9]+$") Then
            ' 数字以外は例外スロー
            Throw New TokuisakiCodeException _
                ("得意先コードに数字以外の文字があります")
        End If

        ' 引数長さチェック(得意先コードは4桁)
        If Not tCode.Length = 4 Then
            ' 4桁以外は例外スロー
            Throw New TokuisakiCodeException _
                ("得意先コードの桁数が正しくありません")
        End If

    End Sub

End Class

'////////////// 派生クラス:得意先選択更新削除 /////////////
Public Class ClsTokuisaki
    Inherits ClsTokuisakiBase

    '=======================================================
    ' 機能:コンストラクタ
    ' 引数:得意先コード
    '=======================================================
    Public Sub New(ByVal tCode As String)

        ' 基本クラスのコンストラクタを呼び出す
        MyBase.New()

        ' 得意先コードエラーチェック
        CheckTokuisakiCode(tCode)

        ' 得意先マスター表からレコード取得
        Dim dbIO As New ClsHanbaiKanriDBIO( _
            TABLE_NAME, KEY_FIELD, tCode)
        Dim dt As DataTable = dbIO.GetRowsData()

        ' 得意先マスター表にレコードがあれば正常
        If dt.Rows.Count = 1 Then
            tCodeValue = tCode          ' 得意先コード
            tMeishoValue = CStr(dt.Rows(0)("得意先名称"))
            tJushoValue = CStr(dt.Rows(0)("得意先住所"))
        Else
            ' レコードがなければ例外スロー
            Throw New TokuisakiCodeException _
                ("得意先マスター表にレコードがありません")
        End If

    End Sub

    '-------------------------------------------------------
    ' プロパティ:得意先コード(読取専用)
    '-------------------------------------------------------
    Public ReadOnly Property TokuisakiCode() As String

        ' Getプロパティ
        Get
            Return tCodeValue
        End Get

    End Property

End Class
--------------------------------------------------------------------
次号:得意先確認ボタンクリック処理と得意先変更ボタンクリック処理を実
装します。

====================================================================
VB.NET データベースプログラミング奮闘記
  発行者:
          http://park5.wakwak.com/‾weblab/
--------------------------------------------------------------------
このメールマガジン(マガジンID: 0000128094)は、
インターネットの本屋さん『まぐまぐ』から配信されています。
  http://www.mag2.com/

【購読中止の方法】購読の中止は次のホームページからお願い致します。
  http://park5.wakwak.com/‾weblab/
  http://www.mag2.com/m/0000128094.htm
--------------------------------------------------------------------
このメールマガジン及び「すぐ使えるADO.NET」「やさしいBV2008 ADO.NET」
などのホームページで公開しているソースプログラム・データの利用により
生じた損害等については、発行者は一切責任を負いません。ソースプログラ
ムの再利用は自由です。著作権は発行者が所有します。
このメールマガジン及び「すぐ使えるADO.NET」「やさしいBV2008 ADO.NET」
などホームページに掲載されている会社名・製品名等は、各社の登録商標ま
たは商標です。
====================================================================