受注伝票エントリー 第14回(受注ヘッダーデータクラス)
第86号(2010.7.20発行) ==================================================================== ★★ -- VB.NETデータベースプログラミング奮闘記 -- ★★ (VB 2008 Express & SQL Server 2008 Express) -------------------------------------------------------------------- いつもご購読ありがとうございます。ADO.NETの基本的なサンプルプログラ ムをお届けします。これからもよろしくお願いいたします。 やさしいVB2008 ADO.NET → https://adonetvb.com/index.html ==================================================================== ■■ 受注伝票エントリー 第14回 ■■ フォームから入力した受注データを、受注ヘッダー表と受注ディテール表に 登録するプログラムを作成します。 フォーム → https://adonetvb.com/OrderEntry/index.html テーブル定義 → https://adonetvb.com/OrderEntry/DB.html バックナンバー → https://adonetvb.com/MailMagazine/index.html -------------------------------------------------------------------- ■ 受注ヘッダーデータクラス ■ 前号で仮実装したClsInsertHeaderクラスとClsHeaderクラスを本実装します。 ClsJuchuDenpyoIOクラスは次号に掲載します。 【ClsInsertHeaderクラス】 受注ヘッダー表に登録するデータを管理するクラスで、受注ヘッダーデータ 基本クラスClsHeaderBaseを継承します。 ClsHeaderBaseクラスには、JuchuBiプロパティ、TokuisakiCodeプロパティ、 CheckJuchuBangoメソッドを実装します。 ClsInsertHeaderクラスとClsHeaderクラスには、JuchuBangoプロパティを 実装します。 --【プログラムソースリスト:ClsJuchuHeader.vb】--------------------- Option Strict On Imports System.Text.RegularExpressions '%%%%%%%%%%% 抽象クラス:受注ヘッダー基本クラス %%%%%%%%%%%% Public MustInherit Class ClsHeaderBase '-------------------< 定数メンバー>-------------------- Protected Const TABLE_NAME As String = "受注ヘッダー表" Protected Const KEY_FIELD As String = "受注番号" '-------------------< 変数メンバー>-------------------- Protected juchuBiValue As Date ' 受注日 Protected juchuBangoValue As String ' 受注番号 Protected tokuisakiCodeValue As String ' 得意先コード '******************************************************* ' 機能:受注ヘッダー表1行の空データ生成メソッド ' 引数:なし ' 戻値:受注ヘッダー表の1行分空データ ' 補足:インスタンスの生成不要 '******************************************************* Public Shared Function CreateDataRow() As DataRow Dim retDr As DataRow ' リターン値 ' 受注ヘッダー表の1行分空データ生成 Dim dbIO As New ClsHanbaiKanriDBIO( _ TABLE_NAME, KEY_FIELD) retDr = dbIO.CreateDataRow() ' ◆戻値を設定してリターン Return retDr End Function ' ここまで85号に掲載 '------------------------------------------------------- ' プロパティ:受注日 '------------------------------------------------------- Public Property JuchuBi() As Date ' Getプロパティ Get Return juchuBiValue End Get ' Setプロパティ Set(ByVal value As Date) juchuBiValue = value End Set End Property '------------------------------------------------------- ' プロパティ:得意先コード '------------------------------------------------------- Public Property TokuisakiCode() As String ' Getプロパティ Get Return tokuisakiCodeValue End Get ' Setプロパティ Set(ByVal tCode As String) ' 得意先エラーチェック Dim tokui As New ClsTokuisaki(tCode) tokuisakiCodeValue = tCode End Set End Property '******************************************************* ' 機能:受注番号のエラーチェックメソッド ' 引数:受注番号 ' 補足:エラーがあれば例外をスロー '******************************************************* Protected Sub CheckJuchuBango(ByVal juchuBango As String) ' 未入力はエラー If juchuBango.Length = 0 Then Throw New JuchuBangoException _ ("受注番号を入力してください") End If ' 数字以外はエラー If Not Regex.IsMatch(juchuBango, "^[0-9]+$") Then Throw New JuchuBangoException _ ("受注番号に数字以外の文字があります") End If ' 6桁以外はエラー If Not juchuBango.Length = 6 Then Throw New JuchuBangoException _ ("受注番号の桁数が違います") End If End Sub End Class '////////// 派生クラス:受注ヘッダー表追加データ /////////// Public Class ClsInsertHeader Inherits ClsHeaderBase '======================================================= ' 機能:コンストラクタ ' 引数:受注ヘッダーデータ '======================================================= Public Sub New(ByVal row As DataRow) ' 基本クラスのコンストラクタを呼び出す MyBase.New() ' 受注ヘッダーデータをセット JuchuBi = CDate(row("受注日")) JuchuBango = CStr(row("受注番号")) TokuisakiCode = CStr(row("得意先コード")) End Sub '------------------------------------------------------- ' プロパティ:受注番号 '------------------------------------------------------- Public Property JuchuBango() As String ' Getプロパティ Get Return juchuBangoValue End Get ' Setプロパティ Set(ByVal jBango As String) ' 受注番号エラーチェック CheckJuchuBango(jBango) ' 受注ヘッダー表からレコード取得 Dim dbIO As New ClsHanbaiKanriDBIO( _ TABLE_NAME, KEY_FIELD, jBango) Dim dt As DataTable = dbIO.GetRowsData() ' 受注ヘッダー表にレコードがなければ正常 If dt.Rows.Count = 0 Then juchuBangoValue = jBango Else ' 受注ヘッダー表にレコードがあれば例外スロー Throw New JuchuBangoException _ ("この受注番号は登録済みです") End If End Set End Property End Class '////////////// 派生クラス:受注選択更新削除 /////////////// Public Class ClsHeader Inherits ClsHeaderBase '======================================================= ' 機能:コンストラクタ ' 引数:受注番号 '======================================================= Protected Sub New(ByVal juchuBango As String) ' 基本クラスのコンストラクタを呼び出す MyBase.New() ' 受注番号エラーチェック CheckJuchuBango(juchuBango) ' 受注ヘッダー表からレコード取得 Dim dbIO As New ClsHanbaiKanriDBIO( _ TABLE_NAME, KEY_FIELD, juchuBango) Dim dt As DataTable dt = dbIO.GetRowsData() ' 受注ヘッダー表にレコードがあれば正常 If dt.Rows.Count = 1 Then ' レコードがあった時 MyBase.JuchuBi = CDate(dt.Rows(0)("受注日")) juchuBangoValue = CStr(dt.Rows(0)("受注番号")) MyBase.TokuisakiCode = CStr(dt.Rows(0)("得意先コード")) Else ' レコードが無かった時エラー Throw New JuchuBangoException _ ("受注ヘッダー表にレコードがありません") End If End Sub '------------------------------------------------------- ' プロパティ:受注番号(読取専用) '------------------------------------------------------- Public ReadOnly Property JuchuBango() As String ' Getプロパティ Get Return juchuBangoValue End Get End Property End Class -------------------------------------------------------------------- 次号:受注ヘッダー表と受注ディテール表にレコードを追加(挿入)する ClsJuchuDenpyoIOクラスを実装します。 ==================================================================== VB.NET データベースプログラミング奮闘記 発行者:ウェブ実験室(adonet‾live.jp ‾はあっとマーク) 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」 などホームページに掲載されている会社名・製品名等は、各社の登録商標ま たは商標です。 ====================================================================