バックナンバー:VB.NETデータベースプログラミング
ADO.NETの基本的なプログラミングを中心に、すぐ使えるサンプルプログラム満載です。
【第18号】
第18号(2004.11.24発行) ====================================================================== ★★ VB.NETデータベースプログラミング奮闘記 ★★ ---------------------------------------------------------------------- ADO.NETの基本的なプログラミングを中心に掲載します。 末永くご購読の程よろしくお願い申し上げます。 すぐ使えるADO.NET --> サンプルプログラム満載 http://park5.wakwak.com/‾weblab/ ====================================================================== -----【目次】----- 1. VB.NETワンポイント:IsDate関数とIsLeapYearメソッド 2. ADO.NET:Excelファイルの論理的削除処理 2 ---------------------------------------------------------------------- ■■ VB.NETワンポイント:IsDate関数とIsLeapYearメソッド ■■ ◆IsDate関数 前号で、文字列をDate型に変換する関数DateValueを紹介しましたが、引数の 文字列が正しい日付を表現していない場合、例外を発生します。CDate関数も 同様です。 Dim dateTemp As Date = DateValue("2004/15/1 14:00:00") とすると、月が存在しないため、例外が発生します。 今回は変換前に、文字列が正しく日付を表現しているか検査するIsDate関数を 紹介します。 IsDate関数は、引数がDate型の場合、またはDate型に変換できる文字列の場合、 Trueを返し、それ以外は、Falseを返します。 次の例では、エラーメッセージ「日付ではありません」が表示さます。 strDate = "2004/15/1 14:00:00" If IsDate(strDate) Then dateTmp = DateValue(strDate) Trace.WriteLine(CStr(dateTmp)) Else MessageBox.Show("日付ではありません") End If "2004/12/1 140000" の場合は、時刻の書式が正しくありませんから、 IsDate("2004/12/1 140000")は、Falseを返します。 ◆DateTime.IsLeapYearメソッド うるう年をチェックするDateTime.IsLeapYearメソッドも紹介します。 DateTime.IsLeapYearメソッドを使えば、うるう年のチェックが簡単にできま す。引数には、西暦年を指定します。うるう年の場合、Trueを返し、それ以外 は、Falseを返します。 If DateTime.IsLeapYear(2004) Then MessageBox.Show("うるう年です") Else MessageBox.Show("うるう年ではありません") End If ---------------------------------------------------------------------- ■■ ADO.NET:Excelファイルの論理的な削除処理 2 ■■ 前号のつづきです。論理的な削除処理の削除ボタン押下処理を掲載します。 Excelシート(シート名は、デフォルトの"Sheet1")と画面は、次のとおりです。 A B C D E ---------------------------------------------------------------- 1 削除区分 郵便番号 都道府県名 市区町村名 町域名 2 100-0102 東京都 大島大島町 岡田 3 100-0211 東京都 大島大島町 差木地 : ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ Label1 txtYubinBango btnKensaku ┃┌―――――┐┌―――――┐ ┌――――┐ ┃│郵便番号 ││ │ │ 検索 │ ┃└―――――┘└―――――┘ └――――┘ ┃ Label2 lblKenmei ┃┌―――――┐┌――――――――┐ ┃│都道府県名││ │ ┃└―――――┘└――――――――┘ ┃ Label3 lblShicyosonMei ┃┌―――――┐┌――――――――┐ ┃│市区町村名││ │ ┃└―――――┘└――――――――┘ ┃ Label4 lblChoMei btnSakuzyo ┃┌―――――┐┌――――――――┐ ┌――――┐ ┃│ 町域名 ││ │ │ 削除 │ ┃└―――――┘└――――――――┘ └――――┘ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ 削除する場合には、削除区分フィールドに'd'の文字をセットして、更新処理 します。参照する時は、削除区分が'd'の行をWHERE句で除外して、削除行を 選択できないようにします。 削除処理で使用する更新処理のSQL文は、次のようになります。 "UPDATE [Sheet1$] SET 削除区分='d' WHERE 郵便番号=@yubinBango" テーブル名は、'['と']'で囲って、[Sheet1$]とします。 削除区分に文字'd'をセットして、パラメータの@yubinBangoには、画面から入 力した削除する行の郵便番号をセットします。そして、ExecuteNonQuery メソッドを呼び出して、更新処理を実行します。 メソッドの戻り値は、更新処理したレコード数になります。正常に更新処理さ れていれば、戻り値が1になります。 削除区分に'd'が設定された行は、削除されていますから、検索時は、 "SELECT * FROM [Sheet1$] WHERE 郵便番号 = @yubinBango " + _ "AND (削除区分 <> 'd' OR 削除区分 IS NULL)" として、WHERE句で削除行を除外します。 それでは、削除ボタン押下時のソースリストを掲載します。 前号及び前々号で、Dim oDataSet As DataSet = New DataSet() を宣言してい ましたが、oDataSetは使っていませんので不要です。この行をすべて削除しま す。たいへん失礼しました。検索ボタン押下時の処理を再度掲載します。 --【プログラムソースリスト】------------------------------------------ Imports System.Data.OleDb Public Class tblYBIdx Public Const zakuzyoKubun As Integer = 0 Public Const yubinBango As Integer = 1 Public Const todofukenMei As Integer = 2 Public Const shichosonMei As Integer = 3 Public Const choikiMei As Integer = 4 End Class Public Class frmExcelDelete Inherits System.Windows.Forms.Form #Region " Windows フォーム デザイナで生成されたコード " '自動生成部分省略 #End Region '★---------- 削除ボタン押下時の処理 ----------★ Private Sub btnSakuzyo_Click( _ ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles btnSakuzyo.Click '---------- Excelシートの1行を論理的に削除する ---------- Dim oConn As New OleDbConnection() Dim oCommand As New OleDbCommand() Dim oDataAdapter As New OleDbDataAdapter() Dim yubinBangoList As New DataTable() Try 'DB接続文字列の設定 oConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; " + _ "Data Source=" + Application.StartupPath + "¥郵便番号簿.xls;" + _ "Extended Properties=""Excel 8.0;HDR=YES;""" 'コネクションの設定 oCommand.Connection = oConn 'SQL文の設定 oCommand.CommandText = "UPDATE [Sheet1$] " + _ "SET 削除区分='d' WHERE 郵便番号=@yubinBango" 'DB接続を開く oConn.Open() 'UPDATEコマンドの設定 oDataAdapter.UpdateCommand = oCommand 'SQL文パラメータの設定 oCommand.Parameters.Add( _ New OleDbParameter("@yubinBango", OleDbType.Char, 8)) oCommand.Parameters("@yubinBango").Value = Me.txtYubinBango.Text 'Excelブック更新処理実行 Dim count As Integer count = oCommand.ExecuteNonQuery() '更新レコード数のチェック If count = 1 Then '画面を初期状態に戻す Me.lblKenmei.Text = "" Me.lblShicyosonMei.Text = "" Me.lblChoMei.Text = "" Me.txtYubinBango.Focus() Me.btnSakuzyo.Enabled = False MessageBox.Show( _ "郵便番号簿から" + Me.txtYubinBango.Text + "の行を削除しました") Me.txtYubinBango.Text = "" Else MessageBox.Show("郵便番号簿の削除に失敗しました", "エラー") End If Catch oExcept As Exception '例外が発生した時の処理 MessageBox.Show(oExcept.ToString, "例外発生") Finally 'DB接続を閉じる If Not oConn Is Nothing Then oConn.Close() End If End Try End Sub '---------- 検索ボタン押下時の処理(再掲) ---------- 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 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文の設定 oCommand.CommandText = "SELECT * FROM [Sheet1$] " + _ "WHERE 郵便番号 = @yubinBango " + _ "AND (削除区分 <> 'd' OR 削除区分 IS NULL)" '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(tblYBIdx.todofukenMei)) Me.lblShicyosonMei.Text = _ CStr(yubinBangoList.Rows(0).Item(tblYBIdx.shichosonMei)) Me.lblChoMei.Text = _ CStr(yubinBangoList.Rows(0).Item(tblYBIdx.choikiMei)) Me.btnSakuzyo.Enabled = True '削除ボタンの活性化 ElseIf yubinBangoList.Rows.Count = 0 Then '行データがなかった時の処理 MessageBox.Show("郵便番号簿にデータがありません", "エラー") Me.lblKenmei.Text = "" Me.lblShicyosonMei.Text = "" Me.lblChoMei.Text = "" Me.txtYubinBango.Focus() Me.btnSakuzyo.Enabled = False '削除ボタンの不活性化 Else '行データが重複していた時の処理 MessageBox.Show( _ "郵便番号簿に同一郵便番号が2行以上あります", "エラー") Me.btnSakuzyo.Enabled = False '削除ボタンの不活性化 End If Catch oExcept As Exception '例外が発生した時の処理 MsgBox(oExcept.ToString, MsgBoxStyle.OKOnly) '削除ボタンの不活性化 Me.btnSakuzyo.Enabled = False End Try End Sub End Class ---------------------------------------------------------------------- ■■ 次号予告 第19号(12月15日頃発行予定) ■■ 1. VB.NETワンポイント 2. ADO.NET:テキストファイルの読み込み ====================================================================== 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.