すぐ使えるADO.NET

【Visual BasicによるADO.NETデータベースプログラミング】

本の紹介

バックナンバー:VB.NETデータベースプログラミング

独自のデータアクセスクラスに削除メソッドを追加して、キー値のレコードを削除する。




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

Copyright© すぐ使えるADO.NET. All rights reserved.