すぐ使えるADO.NET

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

本の紹介

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

ADO.NETの基本的なプログラミングを中心に、すぐ使えるサンプルプログラム満載です。




【第66号】

 第66号(2008.9.30発行)
======================================================================
        ★★ -- VB.NETデータベースプログラミング奮闘記 -- ★★
            (VB 2005 Express & SQL Server 2005 Express)
----------------------------------------------------------------------
いつもご購読ありがとうございます。ADO.NETの基本的なプログラミングを中
心に掲載します。今後ともよろしくお願い申し上げます。

すぐ使えるADO.NET --> http://park5.wakwak.com/‾weblab/
----------------------------------------------------------------------
[やさしいVB2008 ADO.NET]を、新規に開設しました。内容はまだまだですが、
こちらもよろしくお願い致します。

やさしいVB2008 ADO.NET --> https://adonetvb.com/
======================================================================
                  ■■ 社員テーブルを更新する 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    TxtShainShimei
┃┌―――――┐ ┌――――――――┐
┃│社員氏名 │ │        │
┃└―――――┘ └――――――――┘
┃  Label3    TxtShainKana
┃┌―――――┐ ┌――――――――――――――┐
┃│社員カナ │ │              │
┃└―――――┘ └――――――――――――――┘
┃  Label4    CboBushoMei
┃┌―――――┐ ┌―――――――――┬―┐
┃│部署   │ │         │▼│
┃└―――――┘ └―――――――――┴―┘
┃ BtnUpdate    BtnClear
┃┌――――┐  ┌―――――┐
┃│ 更新 │  │ クリア │
┃└――――┘  └―――――┘
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

【検索ボタンクリック処理】
入力した社員コードが、社員テーブルに存在すれば、該当レコードを表示して、
社員コードを入力不可に設定します。社員テーブルにレコードが存在しなけれ
ば、エラーメッセージを表示します。

【クリアボタンクリック処理】
社員コードと検索ボタンのEnableプロパティをTrue、他はFalseにして、入出
力項目を初期状態に戻します。

【更新ボタンクリック処理】
入力データのエラーチェックをして、エラーがなければ、該当レコードを更新
します。

----------------------------------------------------------------------
                   ■■ 検索ボタンクリック処理 ■■

社員データは、社員コードを引数に指定して、ClsShainTableIOクラスの
GetKeyDataメソッドで取得します。

部署データは、部署コードを引数に指定して、ClsBushoTableIOクラスの
GetKeyDataメソッドで取得します。

部署コードは、コンボボックスから部署名を選択して変更するので、あらかじ
め、変更前の部署名のインデックス値を、 SelectedIndexプロパティに設定し
ます。インデックス値は、部署名を引数に指定して、FindStringメソッドで取
得できます。

  Me.CboBushoMei.SelectedIndex _
  = Me.CboBushoMei.FindString(CStr(dtBusho.Rows(0)("部署名")))

なお、コンボボックスのデータ連結は、ホームロード処理でしています。

また、社員コードを入力不可に、検索ボタンを無効にして、その他の入力項目
を入力可能に、ボタンを有効に設定します。


----------------------------------------------------------------------
            ■■ フォーム初期設定プロシジャー ClearForm ■■

社員コードを入力可能に、検索ボタンを有効にして、その他の入力項目を入力
不可に、ボタンを無効に設定します。

ここで、コンボボックスに全部署名を表示できるように、部署テーブルの全レ
コード取得します。コンボボックスに部署名を表示できるようにするために、
DisplayMemberプロパティに部署名の列名を設定します。

        Me.CboBushoMei.DisplayMember = "部署名"

選択した部署名から部署コードを取得できるように、SelectdValueプロパティ
に、部署コードの列名を設定します。

        Me.CboBushoMei.ValueMember = "部署コード"

コンボボックスにデータを連結するために、DataSourceプロパティに、取得し
た部署データを設定します。

        Me.CboBushoMei.DataSource = dtBusho

フォームロード処理と、クリアボタンクリック処理で、ClearFormプロシージャ
を呼び出します。


--【プログラムソースリスト(ファイル名:FormUpdate66.vb)】-----------
Public Class FormUpdate66

  '----------<< 検索ボタン押下処理 >>----------
  Private Sub BtnRetrieval_Click _
  (ByVal sender As System.Object, ByVal e As System.EventArgs) _
  Handles BtnRetrieval.Click

    Try
      Dim shainTable As New ClsShainTableIO
      Dim bushoTable As New ClsBushoTableIO

      '---<< 社員テーブルのレコード取得 >>---
      Dim dtShain As New DataTable
      dtShain = shainTable.GetKeyData(Me.TxtShainCode.Text)

      If dtShain.Rows.Count = 1 Then
         '---<< レコードがあった時 >>---
          Me.TxtShainShimei.Text = CStr(dtShain.Rows(0)("社員氏名"))
          Me.TxtShainKana.Text = CStr(dtShain.Rows(0)("社員カナ"))

          '部署名取得
          Dim dtBusho As New DataTable
          dtBusho = bushoTable.GetKeyData _
          (CStr(dtShain.Rows(0)("部署コード")))

          '取得した部署名にインデックスを設定
          Me.CboBushoMei.SelectedIndex _
          = Me.CboBushoMei.FindString(CStr(dtBusho.Rows(0)("部署名")))

          '社員コード・検索ボタン入力不可
          Me.TxtShainCode.Enabled = False
          Me.BtnRetrieval.Enabled = False
          Me.TxtShainShimei.Enabled = True
          Me.TxtShainKana.Enabled = True
          Me.CboBushoMei.Enabled = True
          Me.BtnUpdate.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 FormUpdate66_Load _
  (ByVal sender As System.Object, ByVal e As System.EventArgs) _
  Handles MyBase.Load

    'フォーム初期設定
    Me.ClearForm()

  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.TxtShainShimei.Text = Nothing
    Me.TxtShainKana.Text = Nothing

    '---<< コンボボックスに全部署名を表示 >>---
    Dim bushoTable As New ClsBushoTableIO
    Dim dtBusho As New DataTable

    '部署テーブルの全レコード取得
    dtBusho = bushoTable.GetAllData _
    (New String() {"部署コード", "部署名"}, "部署コード", True)
    'コンボボックスに部署名を表示できるようにする
    Me.CboBushoMei.DisplayMember = "部署名"
    '部署コードをSelectdValueで取得できるようにする
    Me.CboBushoMei.ValueMember = "部署コード"
    'コンボボックスにデータを連結する
    Me.CboBushoMei.DataSource = dtBusho

    '社員コード・検索ボタン入力可
    Me.TxtShainCode.Enabled = True
    Me.BtnRetrieval.Enabled = True
    Me.TxtShainShimei.Enabled = False
    Me.TxtShainKana.Enabled = False
    Me.CboBushoMei.Enabled = False
    Me.BtnUpdate.Enabled = False

    '社員コードにフォーカス
    Me.TxtShainCode.Focus()

  End Sub

End Class

----------------------------------------------------------------------
次号は、更新ボタンクリック処理とテーブル更新メソッドの予定です。

======================================================================
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」ホームページで公開している
ソースプログラム・データの利用により生じた損害等については、発行者は
一切責任を負いません。ソースプログラムの再利用は自由です。著作権は発行
者が所有します。
このメールマガジン及び「すぐ使えるADO.NET」ホームページに掲載されてい
る会社名・製品名等は、各社の登録商標または商標です。
======================================================================

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