受注伝票エントリー 第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」
などホームページに掲載されている会社名・製品名等は、各社の登録商標ま
たは商標です。
====================================================================