バックナンバー:VB.NETデータベースプログラミング
ADO.NETの基本的なプログラミングを中心に、すぐ使えるサンプルプログラム満載です。
【第15号】
第15号(2004.9.30発行) ====================================================================== ★★ VB.NETデータベースプログラミング奮闘記 ★★ ---------------------------------------------------------------------- ADO.NETの基本的なプログラミングを中心に掲載します。 末永くご購読の程よろしくお願い申し上げます。 すぐ使えるADO.NET --> サンプルプログラム満載 http://park5.wakwak.com/‾weblab/ ====================================================================== -----【目次】----- 1. VB.NETワンポイント:Collectionオブジェクト 2. EXCELファイルを読み込んで、ラベルコントロールに表示する ---------------------------------------------------------------------- ■■ VB.NETワンポイント:Collectionオブジェクト ■■ 今回は、Collectionオブジェクトを紹介します。Collectionオブジェクトには、 Addメソッドを使って、任意のオブジェクトを追加することができます。メン バは、インデックス1からCount値までに格納されます。0には格納されません。 たとえば、フォーム上のコントロールをコレクションに格納する場合には、次 のようにします。 まず、Collectionオブジェクトのインスタンスを生成します。 Dim objCtlColl As New Collection() メンバの追加は、Addメソッドを使います。引数には、オブジェクトとキー値 (String型で一意にする)を指定します。既にフォームで定義済のテキストボッ クスコントロ-ル(TextBox1,TextBox2,TextBox3)を追加するには、一意のキー 値と共に、次のようにコーディングします。 objCtlColl.Add(TextBox1, "txt1") objCtlColl.Add(TextBox2, "txt2") objCtlColl.Add(TextBox3, "txt3") コレクションの各メンバを参照するには、前号で紹介したFor Each … Next ステートメントを使用します。 Dim objCtl As Control For Each objCtl in objCtlColl 'バックカラープロパティにAquamarine色を設定 objCtl.BackColor = Color.Aquamarine Next キー値を使っても、個々に同様な設定することができます。プロパティの設定 をしますので、objCtlCollは、Ctype関数でControl型に変換します。 Dim objCtl2 As Control objCtl2 = CType(objCtlColl.Item("txt1"), Control) objCtl2.BackColor = Color.Red objCtl2 = CType(objCtlColl.Item("txt3"), Control) objCtl2.BackColor = Color.Aquamarine メンバを削除する場合は、Removeメソッドを使います。 先頭のメンバを削除する場合は次のようになります。 objCtlColl.Remove(1) '注:Remove(0)ではない また、キー値を使っても削除できます。 objCtlColl.Remove("txt2") ---------------------------------------------------------------------- ■■ EXCELファイルを読み込んで、ラベルコントロールに表示する ■■ 下記のExcelシート(シート名は、デフォルトの"Sheet1")のデータを読み込み、 ラベルコントロールに表示する方法を紹介します。 A B C D ---------------------------------------------------------------- 1 郵便番号 都道府県名 市区町村名 町域名 2 100-0102 東京都 大島大島町 岡田 3 100-0211 東京都 大島大島町 差木地 4 100-0103 東京都 大島大島町 泉津 : n 104-0061 東京都 中央区 銀座 : 最初に、新規プロジェクトをひとつ作成します。ツールボックスから、コント ロールを貼り付け、プロパティを設定します。txtYubinBangoがテキストボッ クス、btnKensakuがボタンで、他はラベルです。 ┏━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ Label1 txtYubinBango btnKensaku ┃┌―――――┐┌――――┐ ┌――――┐ ┃│郵便番号 ││ │ │ 検索 │ ┃└―――――┘└――――┘ └――――┘ ┃ Label2 lblKenmei ┃┌―――――┐┌――――――――┐ ┃│都道府県名││ │ ┃└―――――┘└――――――――┘ ┃ Label3 lblShicyosonMei ┃┌―――――┐┌――――――――┐ ┃│市区町村名││ │ ┃└―――――┘└――――――――┘ ┃ Label4 lblChoMei ┃┌―――――┐┌――――――――┐ ┃│ 町域名 ││ │ ┃└―――――┘└――――――――┘ ┗━━━━━━━━━━━━━━━━━━━━━━━━━┛ 郵便番号のtxtYubinBangoには、"123-4567"のように入力します。今回は、 入力エラーチェックは省略します。 JetOLEDBプロバイダを使用して、Excelブックにアクセスします。この場合の 接続文字列について説明します。 JetOLEDBプロバイダを使用しますので、今までと同様に、 Providerパラメータには、Microsoft.Jet.OLEDB.4.0を指定します。 Provider=Microsoft.Jet.OLEDB.4.0; Data Source パラメータには、Excelブックのフルパスを指定します。 プロジェクトファイルホルダの下のbinホルダに郵便番号簿.xlsを置けば、 Data Source= d:¥…¥...¥bin¥郵便番号簿.xls; d:¥…¥...¥binは、開発環境により異なりますので、実際には、 Application.StartupPath で取得します。 Extended Properties パラメータには、プロパティが2つあり、";"で区切って 指定します。 1番目は、データベースの種類で、Excel97、2000、2002のExcelブックには、 Excel 8.0を指定します。 2番目は、最初の行がヘッダー(フィールド名)か否かの指定で、最初の行が ヘッダーの場合には、HDR=YESを指定します。HDR=NOの場合は、自動的に フィールド名前が付けられます。 Extended Properties="Excel 8.0;HDR=YES;" 入力した郵便番号の1行を取得するSQL文は、 "Select * from [Sheet1$] WHERE 郵便番号 = @yubinBango" です。テーブル名には、[Sheet1$]のように、シート名の後にドル記号を付加 して指定します。@yubinBangoは、画面から入力した郵便番号をセットします。 Excelブックのデータを取得するには、ataAdapterオブジェクトのFillメソッ ドを使いますが、データベースの接続は自動的に行われますので、Openメソッ ドとCloseメソッドを呼び出す必要はありません。 クラスの先頭で、定数クラス(YBIdx)でフィールド名のインデックス値を定義 していますが、こうしておけば、1行目の都道府県名は、 Dim yubinBangoList As New DataTable() として、 yubinBangoList.Rows(0).Item(1)は、 yubinBangoList.Rows(0).Item(YBIdx.todofukenMei) となります。 では、ソースリストを掲載します。 --【プログラムソースリスト】------------------------------------------ Imports System.Data.OleDb Public Class YBIdx Public Const yubinBango As Integer = 0 Public Const todofukenMei As Integer = 1 Public Const shichosonMei As Integer = 2 Public Const choikiMei As Integer = 3 End Class Public Class frmExcelIN Inherits System.Windows.Forms.Form #Region " Windows フォーム デザイナで生成されたコード " '自動生成部分省略 #End Region '---------- 検索ボタン押下時の処理 ---------- Private Sub btnKensaku_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnKensaku.Click Dim oConn As New OleDbConnection() Dim oCommand As New OleDbCommand() Dim oDataAdapter As New OleDbDataAdapter() Dim oDataSet As DataSet = New DataSet() Dim yubinBangoList As New DataTable() Try 'DB接続文字列の設定 'プロジェクトファイルホルダの下のbinホルダにExcelファイルを置く oConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; " + _ "Data Source=" + Application.StartupPath + "¥郵便番号簿.xls;" + _ "Extended Properties=""Excel 8.0;HDR=YES;""" 'コネクションの設定 oCommand.Connection = oConn 'SQL文の設定 '注:シート名は、デフォルトの"Sheet1"のまま使っています oCommand.CommandText = "Select * from [Sheet1$] " + _ "WHERE 郵便番号 = @yubinBango" 'SELECTコマンドの設定 oDataAdapter.SelectCommand = oCommand 'SQL文パラメータの設定 oCommand.Parameters.Add( _ New OleDbParameter("@yubinBango", OleDbType.Char, 8)) oCommand.Parameters("@yubinBango").Value = Me.txtYubinBango.Text 'データを取得する oDataAdapter.Fill(yubinBangoList) '取得レコード数のチェック If yubinBangoList.Rows.Count = 1 Then Me.lblKenmei.Text = _ CStr(yubinBangoList.Rows(0).Item(YBIdx.todofukenMei)) Me.lblShicyosonMei.Text = _ CStr(yubinBangoList.Rows(0).Item(YBIdx.shichosonMei)) Me.lblChoMei.Text = _ CStr(yubinBangoList.Rows(0).Item(YBIdx.choikiMei)) ElseIf yubinBangoList.Rows.Count = 0 Then '行データがなかった時の処理 MessageBox.Show("郵便番号簿にデータがありません", "エラー") Me.lblKenmei.Text = "" Me.lblShicyosonMei.Text = "" Me.lblChoMei.Text = "" Me.txtYubinBango.Focus() Else '行データが重複していた時の処理 MessageBox.Show("郵便番号簿に同一郵便番号が2行以上あります", "エラー") End If Catch oExcept As Exception '例外が発生した時の処理 MsgBox(oExcept.ToString, MsgBoxStyle.OKOnly) End Try End Sub End Class ---------------------------------------------------------------------- ■■ 次号予告 第16号(10月18日頃発行予定) ■■ 1. VB.NETワンポイント 2. ADO.NET:Excelファイルの追加処理と更新処理 ====================================================================== VB.NET データベースプログラミング奮闘記 第15号(2004.9.30) 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.