【第64号】
第64号(2008.6.19発行) ====================================================================== ★★ -- VB.NETデータベースプログラミング奮闘記 -- ★★ (VB 2005 Express & SQL Server 2005 Express) ---------------------------------------------------------------------- いつもご購読ありがとうございます。ADO.NETの基本的なプログラミングを中 心に掲載します。今後ともよろしくお願い申し上げます。 すぐ使えるADO.NET --> http://park5.wakwak.com/‾weblab/ ====================================================================== ■■ 社員テーブルから削除する 2 ■■ 社員コードを入力して、削除ボタンをクリックすると、入力した社員コードの エラーチェックをし、エラーが無ければ、社員テーブルから該当するレコード を削除します。 【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 ┃┌――――┐ ┌―――――┐ ┃│ 削除 │ │ クリア │ ┃└――――┘ └―――――┘ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ 【検索ボタンクリック処理】 入力した社員コードが、社員テーブルに存在すれば、該当レコードを表示して、 社員コードを入力不可に設定します。社員テーブルに存在しなければ、エラー メッセージを表示します。 【クリアボタンクリック処理】 表示データを初期状態に戻します。 【削除ボタンクリック処理】 該当レコードを社員テーブルから削除します。 ---------------------------------------------------------------------- ■■ 削除ボタンクリック処理 ■■ 引数に社員コードを指定して、ClsShainTableIOクラスの DeleteKeyRecordメ ソッドを呼び出して、社員テーブルの該当レコードを削除します。 エラーチェックは、DeleteKeyRecordメソッドで行います。エラーがあれば、 例外がスローされて、Catchブロックに分岐しますので、正常処理は、 '削除メソッド呼び出し dbIO.DeleteKeyRecord(Me.TxtShainCode.Text) '正常削除後の処理 ............ とコーディングすれば、すっきりします。 【修正】前号のFormDelete63.vbのソースを一部修正しました。 ■の行が修正箇所です。お手数ですが確認をお願いします。 --【プログラムソースリスト(ファイル名:FormDelete63.vb)】----------- Public Class FormDelete63 '----------<< 削除ボタン押下処理 >>---------- Private Sub BtnDelete_Click _ (ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles BtnDelete.Click Try Dim dbIO As New ClsShainTableIO() '削除メソッド呼び出し dbIO.DeleteKeyRecord(Me.TxtShainCode.Text) '正常処理メッセージ表示 MessageBox.Show("正常終了", "削除処理結果") 'フォーム初期設定 Me.ClearForm() Catch oExcept As myDBIOException 'DBIO例外が発生した時の処理 MessageBox.Show(oExcept.Message, "DBIO例外発生") Catch oExcept As Exception 'その他例外が発生した時の処理 MessageBox.Show(oExcept.ToString, "例外発生") End Try End Sub '----------<< 検索ボタン押下処理 >>---------- 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 Me.BtnRetrieval.Enabled = False '■追加 Me.BtnDelete.Enabled = True '■追加 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.Enabled = True '■追加 Me.BtnRetrieval.Enabled = True '■追加 Me.BtnDelete.Enabled = False '■追加 '社員コードにフォーカス Me.TxtShainCode.Focus() End Sub End Class ---------------------------------------------------------------------- ■■ ClsShainTableIOクラスのDeleteKeyRecordメソッド ■■ DeleteKeyRecordメソッドをClsShainTableIOクラスに実装します。 ClsShainTableIOクラスのDeleteKeyRecordメソッドでは、キー値レコードの存 在チェックするExistKeyDataメソッドを呼び出します。このメソッドの中で、 キー値エラーチェックをしているので、DeleteKeyRecordメソッド内では、エ ラーチェックをしていません。 キー値のレコードが存在すれば、基本クラスClsSampleDBIOクラスの DeleteKeyRecordメソッドを呼び出して、引数に指定した社員コードのレコー ドを削除します。 ClsShainTableIO.vbファイルに追加します。 --【プログラムソースリスト】------------------------------------------ Imports System.Configuration '参照の追加でSystem.Configurationを追加 Imports System.Data.SqlClient Imports System.Text.RegularExpressions Imports System.Transactions '参照の追加でSystem.Transactionsを追加 Public Class ClsShainTableIO Inherits ClsSampleDBIO Implements IDBIO '(中略) '******************************************************************* ' 機能:社員テーブルから1レコードを削除するメソッド ' 引数:社員コード(String型) ' 返値:integer型:削除したレコード数 '******1*********2*********3*********4*********5**********6********* Public Overloads _ Function DeleteKeyRecord(ByVal KeyCode As String) As Integer Dim retDeleteCount As Integer 'リターン値 Try 'キー値のレコード存在チェック If Me.ExistKeyData(KeyCode) = True Then '存在すれば、レコード削除 retDeleteCount = _ MyBase.DeleteKeyRecord("社員テーブル", "社員コード", KeyCode) Else '存在しなければ、例外をスロー Throw New myDBIOException _ ("エラー:社員コードのレコードが存在しません") End If Catch ex As Exception '例外が発生したら、例外をスロー Throw New Exception("例外発生:" & ex.ToString) End Try '◆リターン Return retDeleteCount End Function '******************************************************************* ' 機能:社員テーブルキー値のレコードの有無を調べるメソッド ' 引数:主キー値 ' 戻値:レコードあり-->True、レコードなし-->False ' 補足:テーブル名の主キーフィールドはNChar型とする '******1*********2*********3*********4*********5**********6********* Public Overloads _ Function ExistKeyData(ByVal KeyCode As String) As Boolean Dim retExist As Boolean 'リターン値 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 'キー値長さチェック(社員コードは5桁) If Not KeyCode.Length = 5 Then '5桁以外はエラー Throw New myDBIOException _ ("エラー:社員コードの桁数が正しくない") End If '社員テーブルから引数コードのレコードの有無をチェックする retExist = _ MyBase.ExistKeyData("社員テーブル", "社員コード", KeyCode) Catch ex As myDBIOException Throw New myDBIOException(ex.Message) Catch ex As Exception Throw New Exception _ ("ClsShainTableIOのExistKeyDataで例外発生:" & ex.ToString) End Try '◆戻値を設定してリターン Return retExist End Function End Class ---------------------------------------------------------------------- 次号では、基本クラスClsSampleDBIOの削除メソッドDeleteKeyRecordを実装し ます。引数にテーブル名、キーフィールド名、キー値を指定して、汎用的に利 用できるようにします。 ====================================================================== 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.