バックナンバー:VB.NETデータベースプログラミング
ADO.NETの基本的なプログラミングを中心に、すぐ使えるサンプルプログラム満載です。
【第20号】
第20号(2005.1.12発行) ====================================================================== ★★ VB.NETデータベースプログラミング奮闘記 ★★ ---------------------------------------------------------------------- いつもご購読ありがとうございます。昨年同様、本年も引き続きご購読の程、 よろしくお願い申し上げます。 すぐ使えるADO.NET --> サンプルプログラム満載 http://park5.wakwak.com/‾weblab/ ====================================================================== -----【目次】----- 1. VB.NETワンポイント:InputBox関数 2. ADO.NET:DataViewの使い方1 ---------------------------------------------------------------------- ■■ VB.NETワンポイント:InputBox関数 ■■ OKボタン、Cancelボタンに、テキストボックスひとつのフォームなら、 InputBox関数で、簡単に表示することができます。 引数は、次の5個を指定できます。 第1引数:ダイアログボックス内にメッセージとして表示する文字列 第2引数:タイトルバーに表示する文字列(省略可能) 第3引数:テキストボックスに表示する文字列(省略可能) 第4引数:画面の左端からの表示位置(省略可能) 第5引数:画面の上端からの表示位置(省略可能) OKボタンを押すと入力した文字列を、Cancelボタンを押すと、長さ0の文字列 を返します。 次の例は、テキストボックスの入力必須をエラーチェックを行っています。未 入力時の再入力のために、InputBox関数を利用しています。第4引数と第5引数 を省略していますので、画面中央に表示されます。 If Me.TextBox1.Text = "" Then Me.TextBox1.Text = InputBox("IDは入力必須です", "入力エラー", "") Me.TextBox1.Focus() End If ---------------------------------------------------------------------- ■■ ADO.NET:DataViewの使い方1 ■■ コントロールにデータをバインドする場合に、DataViewを使って、社員テーブ ルの社員氏名をリストボックスに表示する例を紹介します。 今回使用するsample.mdbの社員テーブルの定義は、次のとおりです。 key フィールド名 データ型 サイズ 値要求 空文字列の許可 ------------------------------------------------------------ ● 社員コード テキスト型 5 はい いいえ − 社員氏名 テキスト型 20 はい いいえ − 社員カナ テキスト型 40 いいえ はい − 部門コード テキスト型 3 はい いいえ − 入社年月日 日付/時刻型 − はい − − 更新日時 日付/時刻型 − はい − まず、新規プロジェクトをひとつ作成します。フォームにコントロールを3個 貼り付けます。Button1がボタンで、ListBox1とListBox2が、リストボックス です。 Button1を押下すると、ListBox1とListBox2に、DataViewの設定にしたがって、 社員氏名を表示します。 ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ Button1 ListBox1 ListBox2 ┃┌――――┐ ┌――――┐ ┌――――┐ ┃│ 表示 │ │ │ │ │ ┃└――――┘ │ │ │ │ ┃ │ │ │ │ ┃ │ │ │ │ ┃ │ │ │ │ ┃ └――――┘ └――――┘ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ まず、リストボックスに連結するDataViewオブジェクトを生成します。 ポイントは、並べ替え順序やフィルタ条件を、コンストラクタの引数として指 定することです。引数を指定せずに、DataViewを作成し、後からSortや RowFilter等のプロパティを設定すると、インデックスが最低でも2回作成され、 パフォーンスが低下してしまいます。 引数に、データセットテーブル、フィルター、ソート列、カラム状態選択を指 定して、インスタンスを生成すると、たとえば、次のようになります。 Dim dtvBumon As New DataView(oDataSet.Tables("部門テーブル"), _ "部門コード >= '501'", _ "部門コード", _ DataViewRowState.CurrentRows) この場合は、データセットに取り込んだ部門テーブルの変更されていない行か ら、部門コードが'0501'以上の行を、部門コードの昇順に整列して、データ ビューに取り込むことになります。昇順の場合は、"部門コード ASC"の'ASC' を省略することができます。 今回のプログラムでは、同一データセット社員テーブルから、異なる引数で二つの データビューdtvBumon1と、dtvBumon2を生成して、ListBox1とListBox2に表示する 場合を紹介します。 データビューdtvBumon1では、社員コードが'00010'以下の行を、社員カナの降 順に整列して、社員氏名を表示します。したがって、インスタンスの生成は、 次のようにします。 Dim dtvSyain1 As New DataView(oDataSet.Tables("社員テーブル"), _ "社員コード <= '00010'", _ "社員カナ DESC", _ DataViewRowState.CurrentRows) データビューdtvBumon2では、社員テーブルの全行を、社員カナの昇順に整列 して、社員氏名を表示しますので、インスタンスの生成は、次のようにします。 Dim dtvSyain2 As New DataView(oDataSet.Tables("社員テーブル"), _ Nothing, _ "社員カナ", _ DataViewRowState.CurrentRows) それでは、ソースリストを掲載します。 --【プログラムソースリスト】------------------------------------------ Imports System.Data.OleDb Public Class Form1 Inherits System.Windows.Forms.Form #Region " Windows フォーム デザイナで生成されたコード " '自動生成部分省略 #End Region Private Sub Button1_Click _ (ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles Button1.Click Dim oConn As New OleDbConnection() Dim oCommand As New OleDbCommand() Dim oDataAdapter As New OleDbDataAdapter() Dim oDataSet As New DataSet() Try 'DB接続文字列の設定 'プロジェクトファイルホルダの下のbinホルダにMDBファイルを置く oConn.ConnectionString = _ "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + _ Application.StartupPath + "¥sample.mdb" 'コネクションの設定 oCommand.Connection = oConn 'SQL文の設定 Const strSelect As String = _ "SELECT 社員コード, 社員氏名, 社員カナ FROM 社員テーブル" oCommand.CommandText = strSelect '社員テーブルから全レコードデータを取得する oDataAdapter.SelectCommand = oCommand oDataSet.Clear() oDataAdapter.Fill(oDataSet, "社員テーブル") 'データビュー1:dtvSyain1の生成 'DataViewの作成時にコンストラクタの引数指定 '引数:データセットテーブル、フィルター、ソート列、カラム状態選択 Dim dtvSyain1 As New DataView(oDataSet.Tables("社員テーブル"), _ "社員コード <= '00010'", _ "社員カナ DESC", _ DataViewRowState.CurrentRows) 'リストボックスに社員データビュー1を連結する Me.ListBox1.DataSource = dtvSyain1 'リストボックスに社員氏名を表示できるように設定する Me.ListBox1.DisplayMember = "社員氏名" '社員氏名に対応した社員コードを 'SelectdValueで取得できるように設定する Me.ListBox1.ValueMember = "社員コード" 'データビュー2:dtvSyain2の生成 Dim dtvSyain2 As New DataView(oDataSet.Tables("社員テーブル"), _ Nothing, _ "社員カナ", _ DataViewRowState.CurrentRows) 'リストボックスに社員データビュー2を連結する Me.ListBox2.DataSource = dtvSyain2 'リストボックスに社員氏名を表示できるように設定する Me.ListBox2.DisplayMember = "社員氏名" '社員氏名に対応した社員コードを 'SelectdValueで取得できるように設定する Me.ListBox2.ValueMember = "社員コード" Catch oExcept As Exception '例外が発生した時の処理 MsgBox(oExcept.ToString, MsgBoxStyle.OKOnly) End Try End Sub End Class ---------------------------------------------------------------------- ■■ 次号予告 第21号(2月1日発行予定) ■■ 1. VB.NETワンポイント 2. DataViewの使い方2(Findメソッド等) ====================================================================== 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.