バックナンバー:VB.NETデータベースプログラミング
ADO.NETの基本的なプログラミングを中心に、すぐ使えるサンプルプログラム満載です。
【第27号】
第27号(2005.6.9発行)
======================================================================
★★ VB.NETデータベースプログラミング奮闘記 ★★
----------------------------------------------------------------------
いつもご購読ありがとうございます。ADO.NETの基本的なプログラミングを中
心に掲載しますので、今後ともよろしくお願い申し上げます。
すぐ使えるADO.NET --> サンプルプログラム満載
http://park5.wakwak.com/‾weblab/
======================================================================
■■ VB.NETワンポイント:列挙型Enum 2 ■■
列挙型Enumを利用して、元号をリストボックスに表示します。表示した元号を
選択すると、Enumで宣言した値を取得できます。明治を1として、以下順に、
大正を2、昭和を3、平成を4とします。
Enum enumGengo
明治 = 1
大正
昭和
平成
End Enum
フォームロード時に、リストボックスに元号を追加します。
ListBox1.Items.Add(enumGengo.明治)
ListBox1.Items.Add(enumGengo.大正)
ListBox1.Items.Add(enumGengo.昭和)
ListBox1.Items.Add(enumGengo.平成)
リストボックスには、元号がそのまま表示されます。
選択された元号の整数値(1〜4)を取得するためには、SelectedIndexChanged
イベントプロシージャで、ListBox1.SelectedItems(0)を整数に変換します。
Private Sub ListBox1_SelectedIndexChanged( _
ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles ListBox1.SelectedIndexChanged
Console.WriteLine(CInt(ListBox1.SelectedItems(0)))
End Sub
----------------------------------------------------------------------
■■ DataTableとTextBoxをバインドする 2 ■■
DataTableにバインドして、TextBoxに社員テーブルのレコードを表示して、ボ
タンをクリックすると、クリックしたボタンに応じて、表示レコードを前後に
移動するプログラムを作成します。
使用するテーブルは、sample.mdbの社員テーブルです。
------------------------------------------------------------
key フィールド名 データ型 サイズ 値要求 空文字列の許可
------------------------------------------------------------
○ 社員コード テキスト型 5 はい いいえ
− 社員氏名 テキスト型 20 はい いいえ
− 社員カナ テキスト型 40 いいえ はい
− 部門コード テキスト型 3 はい いいえ
− 更新日時 日付/時刻型 − はい −
------------------------------------------------------------
◆DataTableとTextBoxのバインドして、社員テーブルを表示するためのプロ
ジェクトを作成します。フォームに下記のコントロールを貼り付けます。
プロパティを図のように設定します。また、TextBoxは、読取専用で使うため、
入力不可にしてフォーカスがあたらないように、次のプロパティも変更します。
ReadOnly:True、TabStop:False
btnFirstを押すと、先頭レコードに移動、btnBeforeを押すと、一つ前の
レコードに移動、btnNextを押すと、次のレコードに移動、btnLastを押すと、
最終レコードに移動します。各ボタンは、表示レコードの位置に応じて、ボタ
ンを押せないようにします。
StatusBar1には、M/Nの形式で、Mに現レコード位置を、Nには総レコード数を
表示します。
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ DataTableとTextBoxのバインド _□×┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃ Label1 txtSyainCode
┃┌―――――┐ ┌―――――┐
┃│社員コード│ │ │
┃└―――――┘ └―――――┘
┃ Label2 txtSyainSimei
┃┌―――――┐ ┌―――――――――┐
┃│社員氏名 │ │ │
┃└―――――┘ └―――――――――┘
┃ Label3 txtSyainKana
┃┌―――――┐ ┌―――――――――┐
┃│社員カナ │ │ │
┃└―――――┘ └―――――――――┘
┃ btnFirst btnBefore btnNext btnLast
┃┌―――┐ ┌―――┐ ┌―――┐ ┌―――┐
┃│ << │ │ < │ │ > │ │ >> │
┃└―――┘ └―――┘ └―――┘ └―――┘
┠──────────────────────────────┨
┃StatusBar1 ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
----------------------------------------------------------------------
フォームロードでは、clsDBIOクラスのgetAllSyain()メソッドを使って、社員
テーブルの全レコードを取得し、テキストボックスにテーブル列を連結します。
Me.txtSyainCode.DataBindings.Add("Text", oTable, "社員コード")
Me.txtSyainSimei.DataBindings.Add("Text", oTable, "社員氏名")
Me.txtSyainKana.DataBindings.Add("Text", oTable, "社員カナ")
StatusBar1に、M/Nの形式で、Mに現レコード位置を、Nには総レコード数を
表示するために、現在レコード位置と全レコード数を取得します。取得した値
をToString()メソッドで、文字列に変換します。
現在レコード位置は、BindingContext(oTable).Position + 1となります。
Positionプロパティは、0から始まりますので、+1しています。
全レコード数表示は、oTable.Rows.Countで取得できます。
現在のレコード位置に応じて、setBtnEnable()メソッドを呼び出して、カーソ
ル移動ボタンの活性・不活性を設定します。先頭位置ならば、btnFirstと
btnBeforeを押せないようにします。最終位置ならば、btnNextとbtnLastを押
せないようにします。レコードが1件の場合は、すべてのボタンを押せないよ
うしています。
clsDBIOクラスにgetAllSyain()メソッドを実装します。社員コードの昇順に表
示しますので、SQL文には、ORDER BY 社員コード を追加しておきます。
--【プログラムソースリスト】------------------------------------------
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.txtSyainCode.DataBindings.Add("Text", oTable, "社員コード")
Me.txtSyainSimei.DataBindings.Add("Text", oTable, "社員氏名")
Me.txtSyainKana.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
--【プログラムソースリスト:clsDBIO.vb】------------------------------
Imports System.Data.OleDb
Public Class clsDBIO
'--------------------< メンバ:変数 >--------------------
'コネクション
Private mConn As OleDbConnection
'コマンド
Private mCommand As OleDbCommand
'*******************************************************************
' 機能:コンストラクタ
' 引数:なし
'*******************************************************************
Public Sub New()
Try
'DB接続文字列の設定
mConn = New OleDbConnection()
mConn.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" _
& Application.StartupPath & "¥sample.mdb"
'コネクションオブジェクトの設定
mCommand = New OleDbCommand()
mCommand.Connection = mConn
Catch oExcept As Exception
Throw New Exception _
("clsDBIOのコンストラクタで例外発生" + oExcept.ToString)
End Try
End Sub
'*******************************************************************
' 機能:社員テーブル全レコード取得メソッド
' 引数:なし
' 戻値:DataTable型 取得したテーブルレコード行コレクション
'*******************************************************************
Public Function getAllSyain() As DataTable
Dim retDataTable As New DataTable() 'リターン値
Dim dataAdapter As New OleDbDataAdapter()
Try
'SQL文設定
mCommand.CommandText = _
"SELECT * FROM 社員テーブル ORDER BY 社員コード"
'テーブルからレコード取得
dataAdapter.SelectCommand = mCommand
dataAdapter.Fill(retDataTable)
Catch oExcept As Exception
Throw New Exception _
("clsTableSyainのgetAllRecで例外発生" + oExcept.ToString)
End Try
'◆戻値を設定してリターン
Return retDataTable
End Function
'------ 以下省略 -----
End Class
----------------------------------------------------------------------
■■ 次号予告 第28号(7月5日発行予定) ■■
1. VB.NETワンポイント
2. DataTableとLabel等のコントロールをバインドする
======================================================================
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」ホームページに掲載されて
いる会社名・製品名等は、各社の登録商標または商標です。
======================================================================
↑このページ(メルマガ:VB.NETデータベース) 先頭へ | すぐ使えるADO.NET ホームへ
Copyright© すぐ使えるADO.NET. All rights reserved.