バックナンバー: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.