バックナンバー:VB.NETデータベースプログラミング
独自のデータアクセスクラスに削除メソッドを追加して、キー値のレコードを削除する。
English speaking http://technician-eu.su it technician.
【第63号】
第63号(2008.5.14発行)
======================================================================
★★ -- VB.NETデータベースプログラミング奮闘記 -- ★★
(VB 2005 Express & SQL Server 2005 Express)
----------------------------------------------------------------------
いつもご購読ありがとうございます。ADO.NETの基本的なプログラミングを中
心に掲載します。今後ともよろしくお願い申し上げます。
すぐ使えるADO.NET --> http://park5.wakwak.com/‾weblab/
======================================================================
■■ 社員テーブルから削除する 1 ■■
社員コードを入力して、削除ボタンをクリックすると、入力した社員コードの
エラーチェックをし、エラーが無ければ、社員テーブルから該当するレコード
を削除します。
【sampleデータベースの社員テーブル】
----------------------------------------------------------------------
key 列 名 データ型 nullを許容 備 考
----------------------------------------------------------------------
○ 社員コード nchar(5) 許容しない 英数字のみ
− 社員氏名 nvarchar(20) 許容しない
− 社員カナ nvarchar(40) 許容しない
− 部署コード nchar(4) 許容しない
− 更新日時 datetime 許容しない
----------------------------------------------------------------------
【sampleデータベースの部署テーブル】
----------------------------------------------------------------------
key 列 名 データ型 nullを許容 備 考
----------------------------------------------------------------------
○ 部署コード nchar(4) 許容しない 英数字のみ
− 部署名 nvarchar(20) 許容しない
− 更新日時 datetime 許容しない
----------------------------------------------------------------------
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ 社員テーブル削除 _□×┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃ Label1 TxtShainCode BtnRetrieval
┃┌―――――┐ ┌―――――┐ ┌――――┐
┃│社員コード│ │ │ │ 検索 │
┃└―――――┘ └―――――┘ └――――┘
┃ Label2 LblShainShimei
┃┌―――――┐ ┌――――――――┐
┃│社員氏名 │ │ │
┃└―――――┘ └――――――――┘
┃ Label3 LblShainKana
┃┌―――――┐ ┌――――――――――――――┐
┃│社員カナ │ │ │
┃└―――――┘ └――――――――――――――┘
┃ Label4 LblBushoMei
┃┌―――――┐ ┌――――――┐
┃│部署 │ │ │
┃└―――――┘ └――――――┘
┃ BtnDelete BtnClear
┃┌――――┐ ┌―――――┐
┃│ 削除 │ │ クリア │
┃└――――┘ └―――――┘
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
【検索ボタンクリック処理】
入力した社員コードが、社員テーブルに存在すれば、該当レコードを表示して、
社員コードを入力不可に設定します。社員テーブルに存在しなければ、エラー
メッセージを表示します。
【削除ボタンクリック処理】
該当レコードを社員テーブルから削除します。
【クリアボタンクリック処理】
表示データを初期状態に戻します。
----------------------------------------------------------------------
■■ 検索ボタンクリック処理 ■■
部署名の表示は、部署コードをキーにして、部署テーブルから部署名を取得し
ています。そのために、ClsBushoTableIOクラスにGetKeyDataメソッドを実装
します。
Dim bushoTable As New ClsBushoTableIO
Dim dtBusho As New DataTable
dtBusho = bushoTable.GetKeyData(CStr(dt.Rows(0)("部署コード")))
Me.LblBushoMei.Text = CStr(dtBusho.Rows(0)("部署名"))
また、社員コードは入力不可にしているのは、検索ボタンクリック後に、社員
コードを変更できないようにするためです。
--【プログラムソースリスト(ファイル名:FormDelete63.vb)】-----------
Public Class FormDelete63
'----------<< 検索ボタン押下処理 >>----------
Private Sub BtnRetrieval_Click _
(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles BtnRetrieval.Click
Dim shainTable As New ClsShainTableIO
Dim bushoTable As New ClsBushoTableIO
Dim dt As New DataTable
Try
dt = shainTable.GetKeyData(Me.TxtShainCode.Text)
If dt.Rows.Count = 1 Then
'-----< レコードがあった時 >-----
Me.LblShainShimei.Text = CStr(dt.Rows(0)("社員氏名"))
Me.LblShainKana.Text = CStr(dt.Rows(0)("社員カナ"))
'部署名取得
Dim dtBusho As New DataTable
dtBusho = bushoTable.GetKeyData(CStr(dt.Rows(0)("部署コード")))
Me.LblBushoMei.Text = CStr(dtBusho.Rows(0)("部署名"))
'社員コード入力不可
Me.TxtShainCode.Enabled = False
Else
'-----< レコードが無い時 >-----
MessageBox.Show _
("入力した社員コードのデータがありません", "入力エラー")
End If
Catch ex As myDBIOException
'DBIO独自例外発生時
MessageBox.Show(ex.Message, "エラー発生")
Catch ex As Exception
MessageBox.Show(ex.ToString, "例外発生")
End Try
End Sub
'----------<< クリアボタン押下処理 >>----------
Private Sub BtnClear_Click _
(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles BtnClear.Click
'フォーム初期化
Me.ClearForm()
End Sub
'----------<< フォーム初期化 >>----------
Private Sub ClearForm()
Me.TxtShainCode.Text = Nothing
Me.LblShainShimei.Text = Nothing
Me.LblShainKana.Text = Nothing
Me.LblBushoMei.Text = Nothing
'社員コード入力可能
Me.TxtShainCode.ReadOnly = False
Me.TxtShainCode.TabStop = True
'社員コードにフォーカス
Me.TxtShainCode.Focus()
End Sub
End Class
----------------------------------------------------------------------
■■ ClsBushoTableIOクラスのGetKeyDataメソッド ■■
引数の部署コードのチェックが異なるだけで、58号で作成したClsShainTableIO
クラスのGetKeyDataメソッドとまったく同様になります。
派生クラスClsBushoTableIOでは、引数のエラーチェックをして、基本クラス
のGetKeyDataメソッドを呼び出します。
基本クラスにGetKeyDataメソッドがあるので、派生クラスのGetKeyDataメソッ
ドでは、Overloadsキーワードを付ける必要があります。
派生クラスのGetKeyDataメソッドで、引数のエラーチェック処理を、基本クラ
スのGetKeyDataメソッドで、部署テーブルからレコードを取得する処理を実装
します。
GetKeyDataメソッドを、ClsBushoTableIO.vbファイルに追加します。
--【プログラムソースリスト】------------------------------------------
'*******************************************************************
' 機能:引数にした部署コードのレコードを部署テーブルから取得する
' 引数:ByVal 部署コード(String型)
' 戻値:引数に指定した部署コードのレコード(DataTble型)
'******1*********2*********3*********4*********5**********6*********
Public Overloads _
Function GetKeyData(ByVal KeyCode As String) As DataTable
Dim RetDataTable As New DataTable() 'リターン値
Try
'引数Nothing(未設定)・空白チェック
If KeyCode Is Nothing Or KeyCode = "" Then
Throw New myDBIOException("エラー:部署コードが未設定")
End If
'引数の前後の空白は除去する
KeyCode = KeyCode.Trim()
'キー値文字チェック(キー値は英数字のみで構成されている)
If Not Regex.IsMatch(KeyCode, "^[0-9a-zA-Z]+$") Then
'英数字以外はエラー
Throw New myDBIOException _
("エラー:部署コードに不正な文字あり")
End If
'キー値長さチェック(部署コードは4桁)
If Not KeyCode.Length = 4 Then
'4桁以外はエラー
Throw New myDBIOException _
("エラー:部署コードの桁数が正しくない")
End If
'部署テーブルから引数コードのレコードを取得する
RetDataTable = _
MyBase.GetKeyData("部署テーブル", "部署コード", KeyCode)
Catch ex As myDBIOException
Throw New myDBIOException(ex.Message)
Catch ex As Exception
Throw New Exception _
("ClsBushoTableIOのGetKeyDataで例外発生:" & ex.ToString)
End Try
'◆戻値を設定してリターン
Return RetDataTable
End Function
----------------------------------------------------------------------
次号では、削除ボタンクリック処理などを作成します。
======================================================================
VB.NET データベースプログラミング奮闘記
発行者:ウェブ実験室([email protected])
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」ホームページで公開している
ソースプログラム・データの利用により生じた損害等については、発行者は
一切責任を負いません。ソースプログラムの再利用は自由です。著作権は発行
者が所有します。
このメールマガジン及び「すぐ使えるADO.NET」ホームページに掲載されてい
る会社名・製品名等は、各社の登録商標または商標です。
======================================================================
▲このページ先頭へ | すぐ使えるADO.NET ホームへ
Copyright© すぐ使えるADO.NET. All rights reserved.