バックナンバー:VB.NETデータベースプログラミング
ADO.NETの基本的なプログラミングを中心に、すぐ使えるサンプルプログラム満載です。
【第22号】
第22号(2005.2.22発行)
======================================================================
★★ VB.NETデータベースプログラミング奮闘記 ★★
----------------------------------------------------------------------
いつもご購読ありがとうございます。ADO.NETの基本的なプログラミングを中
心に掲載しますので、今後ともよろしくお願い申し上げます。
すぐ使えるADO.NET --> サンプルプログラム満載
http://park5.wakwak.com/‾weblab/
======================================================================
■■ VB.NETワンポイント:2次元配列の初期化 ■■
前回は、1次元配列の初期化方法を紹介しましたが、今回は、2次元配列の初
期化方法を紹介します。
'◆配列の要素がない場合
'このままでは、値を代入することはできません。
'たとえば、ary1(0,0) = "aaa" とすると、実行時エラーになります。
Dim ary1(,) As String = New String(,) {}
'◆要素の長さのみ初期値に指定
'ary2(0,0) = "" ary2(0,1) = "" ary2(0,2) = ""
'ary2(1,0) = "" ary2(1,1) = "" ary2(1,2) = "" となります。
Dim ary2(,) As String = New String(1, 2) {}
'◆要素の値のみ初期値に指定(要素の長さも決まる)
'ary3(0,0) = 1 ary3(0,1) = 2 ary3(1,0) = 5 ary3(1,1) = 7
'ary3(2,0) = 8 ary3(2,1) = 12 となります。
Dim ary3(,) As Integer = New Integer(,) {{1, 2}, {5, 7}, {8, 12}}
'◆要素の長さと値を初期値に指定
Dim ary4(,) As Integer = New Integer(2, 1) {{1, 2}, {5, 7}, {8, 12}}
'◆配列の長さを指定して変数のみ宣言し、後から値を代入する
'ary5(0,0) = "" ary5(0,1) = "" ary5(0,2) = ""
'ary5(1,0) = "" ary5(1,1) = "" ary5(1,2) = "" となります。
Dim ary5(1, 2) As String
◆配列の境界外の代入は、実行時エラーになります。
----------------------------------------------------------------------
■■ ADO.NETのトランザクション制御1 ■■
トランザクション制御を使用して、社員テーブルと権限テーブルに登録する
プログラムを作成します。
使用するテーブルは、sample.mdbの社員テーブルと権限テーブルです。
テーブルの定義は、次のとおりです。
【社員テーブル】
------------------------------------------------------------
key フィールド名 データ型 サイズ 値要求 空文字列の許可
------------------------------------------------------------
○ 社員コード テキスト型 5 はい いいえ
− 社員氏名 テキスト型 20 はい いいえ
− 社員カナ テキスト型 40 いいえ はい
− 部門コード テキスト型 3 はい いいえ
− 更新日時 日付/時刻型 − はい −
------------------------------------------------------------
【権限テーブル】
------------------------------------------------------------
key フィールド名 データ型 サイズ 値要求 空文字列の許可
------------------------------------------------------------
○ 社員コード テキスト型 5 はい いいえ
− パスワード テキスト型 15 はい いいえ
− 更新日時 日付/時刻型 − はい −
------------------------------------------------------------
◆社員情報を登録するためのプロジェクトを作成します。フォームに下記のコ
ントロールを貼り付けます。Textプロパティを図のように設定します。
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ 社員登録 _□×┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃ Label1 txtSyainCode
┃┌―――――┐ ┌―――――┐
┃│社員コード│ │ │
┃└―――――┘ └―――――┘
┃ Label2 txtSyainSimei
┃┌―――――┐ ┌―――――――――┐
┃│社員氏名 │ │ │
┃└―――――┘ └―――――――――┘
┃ Label3 txtSyainKana
┃┌―――――┐ ┌―――――――――┐
┃│社員カナ │ │ │
┃└―――――┘ └―――――――――┘
┃ Label4 cmbBumonMei lblBumonCode
┃┌―――――┐ ┌――――――――┐ ┌―――┐
┃│部門コード│ │ │▼│ │ │
┃└―――――┘ └――――――――┘ └―――┘
┃ Label5 txtPassWord btnInsert btnClear
┃┌―――――┐ ┌――――――┐ ┌――――┐ ┌――――┐
┃│パスワード│ │ │ │ 登録 │ │クリア │
┃└―――――┘ └――――――┘ └――――┘ └――――┘
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
btnInsertを押すと、入力されたデータのエラーチェックをし、エラーがなけ
れば、社員コード、氏名、カナ、部門コードを社員テーブルに、パスワードを
権限テーブルに登録します。この時、トランザクション制御を行います。
btnClearを押すと、入力データをクリアして、初期画面に戻します。
----------------------------------------------------------------------
◆エラーチェックは、社員登録クラスclsSyainTorokuのSetプロパティに実装
します。入力エラーがあれば、clsExceptionクラスの例外をスローします。
clsException例外クラスは、独自のエラーメッセージを表示するためのクラス
として実装します。
【社員登録クラスclsSyainToroku】
変数: Private m社員コード As String
Private m社員氏名 As String
Private m社員カナ As String
Private m部門コード As String
Private mパスワード As String
プロパティ:Public Property p社員コード() As String
Public Property p社員氏名() As String
Public Property p社員カナ() As String
Public Property p部門コード() As String
Public Property pパスワード() As String
【独自例外クラスclsException】
変数: Private mErrorMessage As String
コンストラクタ:Public Sub New(ByVal errorMessage As String)
◆DBアクセス処理は、clsDBIOクラスに実装します。
【DBアクセスクラス:clsDBIO】
変数: Private mConn As OleDbConnection
Private mCommand As OleDbCommand
コンストラクタ:Public Sub New()
メソッド:Public Function getAllBumon() As DataTable
機能:部門テーブル全レコード取得メソッド
引数:なし
戻値:DataTable型 取得したテーブルレコード行コレクション
Public Function existKeySyain _
(ByVal parKey As String) As Boolean
機能:社員テーブルのキー値のレコードの有無を調べるメソッド
引数:キー値
戻値:ある-->True、ない-->False
Public Function addSyainKengen _
(ByVal parSyain As clsSyainToroku) As Integer
機能:社員テーブルと権限テーブルに1レコードを追加する
引数:社員登録クラスのオブジェクト
戻値:正常にレコードが追加された時 --> 1
追加できなかった時 --> 0
clsDBIOクラスは、社員登録で使うメソッドのみ実装していますが、実際には、
必要なメンバをすべて実装しますので、共通処理を基底クラスにして、そこか
らクラスを派生するようにクラス設計すると良いでしょう。
----------------------------------------------------------------------
今回は、フォームクラスのソースリストを掲載します。他のクラスは、次回以
降になります。ご了承ください。
ホームロードでのコンボボックスcmbBumonMeiの処理について少し補足します。
部門名を選択すると、SelectedIndexChangedイベントが発生しますので、この
イベントハンドラを作成して、選択された部門コードをラベルに表示します。
そのために、DisplayMemberプロパティにフィールド名、ValueMemberプロパ
ティに対応するフィールド名、DataSourceプロパティに、テーブル行データを
設定します。
--【プログラムソースリスト】------------------------------------------
Imports System.Data.OleDb
Public Class Form1
Inherits System.Windows.Forms.Form
#Region " Windows フォーム デザイナで生成されたコード "
'自動生成部分省略
#End Region
'----------<< フォームロード処理 >>----------
Private Sub Form1_Load _
(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles MyBase.Load
Try
Dim oDBIO As New clsDBIO()
Dim oDataTable As DataTable
'部門テーブルの全レコードを取得する
oDataTable = oDBIO.getAllBumon()
'コンボボックスに部門名を表示できるように設定する
Me.cmbBumonMei.DisplayMember = "部門名"
'部門名に対応した部門コードをSelectdValueで取得できるように設定
Me.cmbBumonMei.ValueMember = "部門コード"
'コンボボックスに部門テーブルデータを連結する
Me.cmbBumonMei.DataSource = oDataTable
Catch oExcept As Exception
'例外が発生した時の処理
MessageBox.Show(oExcept.ToString, "フォームロード例外発生")
End Try
End Sub
'----------<< コンボボックスの選択値が変更された場合 >>----------
Private Sub cmbBumonMei_SelectedIndexChanged _
(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles cmbBumonMei.SelectedIndexChanged
'選択した部門コードをラベルに表示
If Me.cmbBumonMei.SelectedIndex <> -1 Then
Me.lblBumonCode.Text = CStr(Me.cmbBumonMei.SelectedValue)
End If
End Sub
'----------<< クリアボタン処理 >>----------
Private Sub btnClear_Click _
(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles btnClear.Click
Me.txtSyainCode.Text = ""
Me.txtSyainSimei.Text = ""
Me.txtSyainKana.Text = ""
Me.txtPassWord.Text = ""
Me.cmbBumonMei.SelectedIndex = 0
Me.txtSyainCode.Focus()
End Sub
'--------<< 登録ボタン処理(社員テーブルにレコード追加) >>--------
Private Sub btnInsert_Click _
(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles btnInsert.Click
Try
Dim oDBIO As New clsDBIO()
Dim oSyain As New clsSyainToroku()
'入力項目のエラーチェック
oSyain.p社員コード = Me.txtSyainCode.Text
oSyain.p社員氏名 = Me.txtSyainSimei.Text
oSyain.p社員カナ = Me.txtSyainKana.Text
oSyain.p部門コード = Me.lblBumonCode.Text
oSyain.pパスワード = Me.txtPassWord.Text
'社員テーブルにレコード追加
Dim recCount As Integer
recCount = oDBIO.addSyainKengen(oSyain)
If recCount = 1 Then
MessageBox.Show("登録しました", "登録完了")
Else
MessageBox.Show("登録に失敗しました", "登録失敗")
End If
Catch oExcept As clsException
'例外が発生した時の処理
MessageBox.Show(oExcept.Message, "エラー発生")
Catch oExcept As Exception
'例外が発生した時の処理
MessageBox.Show(oExcept.ToString, "例外発生")
End Try
End Sub
End Class
----------------------------------------------------------------------
今回のプログラムは、
http://park5.wakwak.com/‾weblab/tocUpdate.html
を加筆修正して、掲載しました。
----------------------------------------------------------------------
■■ 次号予告 第23号(3月14日発行予定) ■■
1. VB.NETワンポイント
2. ADO.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」ホームページに掲載されて
いる会社名・製品名等は、各社の登録商標または商標です。
======================================================================
↑このページ(メルマガ:VB.NETデータベース) 先頭へ | すぐ使えるADO.NET ホームへ
Copyright© すぐ使えるADO.NET. All rights reserved.