【第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.