すぐ使えるADO.NET

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

本の紹介

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

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




【第28号】

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

すぐ使えるADO.NET --> サンプルプログラム満載
                      http://park5.wakwak.com/‾weblab/
======================================================================
     ■■ VB.NETワンポイント:文字列から部分的に文字列を削除 ■■

◆ StringクラスのメソッドRemove(開始位置, 削除文字数)を使うと、指定し
   た文字列の開始位置から指定文字数を削除することができます。

   Dim strBefore1 As String = "Microsoft Visual Basic .NET"
   Dim strAfter As String

   strAfter = strBefore1.Remove(0, 10) '注意:先頭のインデックスは0
   Console.WriteLine(strAfter)         'strAfter = "Visual Basic .NET"

   Dim strBefore2 As String = "マイクロソフト"

   strAfter = strBefore2.Remove(2, 2)
   Console.WriteLine(strAfter)         'strAfter = "マイソフト"

◆ StringクラスのメソッドReplace(削除する文字列,"")を使うと、検索する
   文字列から指定した部分文字列を、空文字列で置き換えることによって、
   削除することができます。

   strAfter = strBefore1.Replace("Basic", "")
   Console.WriteLine(strAfter)  'strAfter = "Microsoft Visual  .NET"

   strAfter = strBefore1.Replace(" ", "")
   Console.WriteLine(strAfter)  'strAfter = "MicrosoftVisualBasic.NET"

◆ StringクラスのメソッドTrimStart、TrimEnd、Trimを使うと、文字列の前
   後にある複数の特定文字を削除することができます。

   Dim aryChar() As Char = {"A"c, "C"c}     '注:文字の時は、末尾にc
   Dim str1 As String = "AACACCAxyzAC"
   Dim str2 As String

   str2 = str1.TrimStart(aryChar)
   Console.WriteLine(str2)          'str2="xyzAC"

   str2 = str1.TrimEnd(aryChar)
   Console.WriteLine(str2)          'str2="AACACCAxyz"

   str2 = str1.Trim(aryChar)
   Console.WriteLine(str2)          'str2="xyz"

----------------------------------------------------------------------
           ■■ DataTableと各種コントロールをバインドする ■■

DataTableをTextBoxだけではなく、Label、Button、CheckBox、RadioButton等
のコントロールにもバインドすることができます。今回はこれらのコントロー
ルのTextプロパティに、社員テーブルのフィールド値を表示するプログラムを
作成します。

使用するテーブルは、sample.mdbの社員テーブルです。
------------------------------------------------------------
key フィールド名   データ型   サイズ  値要求  空文字列の許可
------------------------------------------------------------
○ 社員コード  テキスト型   5 はい  いいえ
− 社員氏名   テキスト型  20 はい  いいえ
− 社員カナ   テキスト型  40 いいえ はい
− 部門コード  テキスト型   3 はい  いいえ
− 更新日時   日付/時刻型  − はい  −
------------------------------------------------------------

◆DataTableとコントロールをバインドして、社員テーブルを表示するための
プロジェクトを作成します。フォームに下記のようにLabel、Button、
CheckBox、RadioButtonコントロールを貼り付け、図のようにプロパティを設
定します。今回は、DataTableと各コントロールがバインドできることを確か
めるテストのため、他のプロパティは既定値のままにしてあります。

btnFirstを押すと、先頭レコードに移動、btnBeforeを押すと、一つ前のレコー
ドに移動、btnNextを押すと、次のレコードに移動、btnLastを押すと、最終レ
コードに移動します。各ボタンは、表示レコードの位置に応じて、ボタンを押
せないようにします。これは前回と同じです。

StatusBar1には、M/Nの形式で、Mに現レコード位置を、Nには総レコード数を
表示します。これも前回と同じです。
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ 各種コントロールとのバインド              _□×┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃  Label1    lblSyainCode
┃┌―――――┐ ┌―――――┐
┃│社員コード│ │     │
┃└―――――┘ └―――――┘
┃  Label2    btnSyainSimei
┃┌―――――┐ ┌――――――――┐
┃│社員氏名 │ │        │
┃└―――――┘ └――――――――┘
┃  Label3   cbxSyainKana      rbtSyainKana
┃┌―――――┐  ┌――――――――┐  ┌――――――――┐
┃│社員カナ │ □│        │ ○│        │
┃└―――――┘  └――――――――┘  └――――――――┘
┃ btnFirst  btnBefore  btnNext   btnLast
┃┌―――┐ ┌―――┐ ┌―――┐ ┌―――┐
┃│ << │ │ <  │ │  > │ │ >> │
┃└―――┘ └―――┘ └―――┘ └―――┘
┠────────────────────────────────┨
┃StatusBar1                           ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
----------------------------------------------------------------------
フォームロードでは、clsDBIOクラスのgetAllSyainメソッドを使って、社員
テーブルの全レコードを取得し、Label、Button、CheckBox、RadioButtonの各
コントロールにテーブル列を連結します。テキストボックスと同様なコーディ
ングで実現できます。

コントロールのDataBindingsプロパティのAdd メソッドに次の引数を指定して
呼び出します。1番目の引数には、各コントロールのTextプロパティ名、2番
目の引数には、データソースであるgetAllSyainの戻り値(DataTable型)、3番
目の引数には、データソースの列名を指定します。

  Me.lblSyainCode.DataBindings.Add("Text", oTable, "社員コード")
  Me.btnSyainSimei.DataBindings.Add("Text", oTable, "社員氏名")
  Me.cbxSyainKana.DataBindings.Add("Text", oTable, "社員カナ")
  Me.rbtSyainKana.DataBindings.Add("Text", oTable, "社員カナ")

clsDBIOクラスのソースリストは前号と同じです。前号を参照してください。

--【プログラムソースリスト】------------------------------------------
Imports System.Data.OleDb

Public Class Form1
  Inherits System.Windows.Forms.Form

#Region " Windows フォーム デザイナで生成されたコード "
  '自動生成部分省略
#End Region

  Private oTable As New DataTable()

  '----------<< フォームロード処理 >>----------
  Private Sub Form1_Load _
  (ByVal sender As System.Object, ByVal e As System.EventArgs) _
  Handles MyBase.Load

    Dim oTblSyain As New clsDBIO()

    oTable = oTblSyain.getAllSyain()
    '各コントロールにテーブル列を連結
    Me.lblSyainCode.DataBindings.Add("Text", oTable, "社員コード")
    Me.btnSyainSimei.DataBindings.Add("Text", oTable, "社員氏名")
    Me.cbxSyainKana.DataBindings.Add("Text", oTable, "社員カナ")
    Me.rbtSyainKana.DataBindings.Add("Text", oTable, "社員カナ")

    'カーソル移動ボタン活性不活性設定
    Me.setBtnEnable()

    '現在レコード位置/全レコード数表示
    Me.StatusBar1.Text = _
    (Me.BindingContext(oTable).Position + 1).ToString() + _
    " / " + oTable.Rows.Count.ToString()

  End Sub

  '最終レコード位置に移動(以降前号と同じです)
  Private Sub btnLast_Click( _
  ByVal sender As System.Object, ByVal e As System.EventArgs) _
  Handles btnLast.Click

    Me.BindingContext(oTable).Position = oTable.Rows.Count - 1

    'カーソル移動ボタン活性不活性設定
    Me.setBtnEnable()

    '現在レコード位置/全レコード数表示
    Me.StatusBar1.Text = _
    (Me.BindingContext(oTable).Position + 1).ToString() + _
    " / " + oTable.Rows.Count.ToString()

  End Sub

  '先頭レコード位置に移動
  Private Sub btnFirst_Click( _
  ByVal sender As System.Object, ByVal e As System.EventArgs) _
  Handles btnFirst.Click

    Me.BindingContext(oTable).Position = 0

    'カーソル移動ボタン活性不活性設定
    Me.setBtnEnable()

    '現在レコード位置/全レコード数表示
    Me.StatusBar1.Text = _
    (Me.BindingContext(oTable).Position + 1).ToString() + _
    " / " + oTable.Rows.Count.ToString()

  End Sub

  '次のレコード位置に移動
  Private Sub btnNext_Click( _
  ByVal sender As System.Object, ByVal e As System.EventArgs) _
  Handles btnNext.Click

    Me.BindingContext(oTable).Position += 1

    'カーソル移動ボタン活性不活性設定
    Me.setBtnEnable()

    '現在レコード位置/全レコード数表示
    Me.StatusBar1.Text = _
    (Me.BindingContext(oTable).Position + 1).ToString() + _
    " / " + oTable.Rows.Count.ToString()

  End Sub

  '前のレコード位置に移動
  Private Sub btnBefore_Click( _
  ByVal sender As System.Object, ByVal e As System.EventArgs) _
  Handles btnBefore.Click

    Me.BindingContext(oTable).Position -= 1

    'カーソル移動ボタン活性不活性設定
    Me.setBtnEnable()

    '現在レコード位置/全レコード数表示
    Me.StatusBar1.Text = _
    (Me.BindingContext(oTable).Position + 1).ToString() + _
    " / " + oTable.Rows.Count.ToString()

  End Sub

  'レコード位置移動ボタン活性不活性設定
  Private Sub setBtnEnable()

    Select Case Me.BindingContext(oTable).Position + 1  'レコード位置
      Case 1  '先頭レコード位置の場合
        Select Case oTable.Rows.Count
          Case 1      '1件の場合
            Me.btnFirst.Enabled = False
            Me.btnBefore.Enabled = False
            Me.btnNext.Enabled = False
            Me.btnLast.Enabled = False
          Case Else   '2件以上の場合
            Me.btnFirst.Enabled = False
            Me.btnBefore.Enabled = False
            Me.btnNext.Enabled = True
            Me.btnLast.Enabled = True
        End Select
      Case oTable.Rows.Count  '最終レコード位置の場合
        Me.btnFirst.Enabled = True
        Me.btnBefore.Enabled = True
        Me.btnNext.Enabled = False
        Me.btnLast.Enabled = False
      Case Else       '中間レコード位置の場合
        Me.btnFirst.Enabled = True
        Me.btnBefore.Enabled = True
        Me.btnNext.Enabled = True
        Me.btnLast.Enabled = True
    End Select

  End Sub

End Class

----------------------------------------------------------------------
            ■■ 次号予告 第29号(7月29日発行予定) ■■
1. VB.NETワンポイント
2. フォームに動的にメニュー項目(ボタンコントロール)を生成する
======================================================================
VB.NET データベースプログラミング奮闘記
          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.