バックナンバー:VB.NETデータベースプログラミング
ADO.NETの基本的なプログラミングを中心に、すぐ使えるサンプルプログラム満載です。
【第17号】
第17号(2004.11.6発行)
======================================================================
★★ VB.NETデータベースプログラミング奮闘記 ★★
----------------------------------------------------------------------
ADO.NETの基本的なプログラミングを中心に掲載します。
末永くご購読の程よろしくお願い申し上げます。
すぐ使えるADO.NET --> サンプルプログラム満載
http://park5.wakwak.com/‾weblab/
======================================================================
-----【目次】-----
1. VB.NETワンポイント:DateValue関数
2. ADO.NET:Excelファイルの論理的削除処理 1
----------------------------------------------------------------------
■■ VB.NETワンポイント:DateValue関数 ■■
文字列をDate型に変換する場合には、CDate関数を使いますが、今回は、文字
列で表現された日付時刻情報を、Date型で返す関数DateValueを紹介します。
ただし、CDate関数と異なるのは、戻り値が日付だけで、時刻を含んでいない
点です。
以下の例では、日付の表示形式と時刻の表示形式は、コントロールパネルの地
域のオプションの設定に従いますので、実行結果の表示形式がこの例のコメン
トと異なる場合があります。
Dim dateTmp As Date
dateTmp = CDate("2004/11/1 14:00:00")
Trace.WriteLine(CStr(dateTmp)) '2004/11/01 14:00:00
'DateValue関数は時刻を返しません
dateTmp = DateValue("2004/11/1 14:00:00")
Trace.WriteLine(CStr(dateTmp)) '2004/11/01
'月を指定しないときは1月、日を指定しないときは1日になります
dateTmp = CDate("平成16年11月11時15分30秒")
Trace.WriteLine(CStr(dateTmp)) '2004/11/01 11:15:30
dateTmp = DateValue("平成16年11月11時15分30秒")
Trace.WriteLine(CStr(dateTmp)) '2004/11/01
'様々な日付形式の例
dateTmp = DateValue("2004 November 15") '2004/11/15
dateTmp = DateValue("November 15 2004") '2004/11/15
dateTmp = DateValue("11/1/2004 14:00:00") '2004/11/01
dateTmp = DateValue("平成16年") '2004/01/01
'私のパソコンは、西暦下2桁の30年〜99年を1900年代と解釈(既定値)します
dateTmp = DateValue("90/1/1") '1990/01/01
----------------------------------------------------------------------
■■ ADO.NET:Excelファイルの論理的な削除処理 1 ■■
Jet OLE DBプロバイダでは、Excelシートの行削除はできませんので、削除区
分を利用して、論理的に削除することにします。Excelシート(シート名は、デ
フォルトの"Sheet1")の先頭列に削除区分を追加します。
A B C D E
----------------------------------------------------------------
1 削除区分 郵便番号 都道府県名 市区町村名 町域名
2 100-0102 東京都 大島大島町 岡田
3 100-0211 東京都 大島大島町 差木地
4 100-0103 東京都 大島大島町 泉津
:
n 104-0061 東京都 中央区 銀座
:
削除する場合には、削除区分フィールドに文字'd'をセットして、更新処理し
ます。参照する時は、削除区分が'd'の行をWHERE句で除外して選択するように
します。
削除のテストをするために、新規プロジェクトをひとつ作成します。ツール
ボックスから、コントロールを貼り付け、プロパティを設定します。
txtYubinBangoがテキストボックス、btnKensakuとbtnSakuzyoがボタンで、
他はラベルです。btnSakuzyoのEnabledプロパティは、Falseに設定しておき
ます。
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Label1 txtYubinBango btnKensaku
┃┌―――――┐┌―――――┐ ┌――――┐
┃│郵便番号 ││ │ │ 検索 │
┃└―――――┘└―――――┘ └――――┘
┃ Label2 lblKenmei
┃┌―――――┐┌――――――――┐
┃│都道府県名││ │
┃└―――――┘└――――――――┘
┃ Label3 lblShicyosonMei
┃┌―――――┐┌――――――――┐
┃│市区町村名││ │
┃└―――――┘└――――――――┘
┃ Label4 lblChoMei btnSakuzyo
┃┌―――――┐┌――――――――┐ ┌――――┐
┃│ 町域名 ││ │ │ 削除 │
┃└―――――┘└――――――――┘ └――――┘
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
まず、検索ボタン押下時は、削除済の行を除外して、入力した郵便番号の行を
検索します。そのときのSQL文は、
"SELECT * FROM [Sheet1$] WHERE 郵便番号 = @yubinBango " + _
"AND (削除区分 <> 'd' OR 削除区分 IS NULL)"
です。テーブル名は、前号の更新処理と同様'['と']'で囲って、[Sheet1$]と
します。
WHERE句では、削除区分が'd'の行を除外しています。ここでひとつ注意するこ
とがあります。削除区分 <> 'd' とした場合は、削除区分に'd'以外の文字が
ある行が検索対象になり、削除区分に何もデータがない行は、検索対象外に
なってしまいます。NULL値の行を選択できるように、
WHERE句に、OR 削除区分 IS NULL が必要です。
パラメータの@yubinBangoには、画面から入力した郵便番号をセットします。
DataAdapter.Fillメソッドで、データを取得し、DataTable.Rows.Countで、取
得レコード数をチェックしています。DataTable.Rows.Countが、1以外ならば、
エラーにしています。今回は、郵便番号の数字チェックや、999-9999のフォー
マットはチェックしていません。
なお、削除ボタン押下処理は、次号に掲載します。ご了承ください。
それでは、検索ボタン押下処理のソースリストを掲載します。
--【プログラムソースリスト】------------------------------------------
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 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文の設定
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
'---------- 削除ボタン押下時の処理 ----------
Private Sub btnSakuzyo_Click( _
ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles btnSakuzyo.Click
'---------- Excelシートの1行を論理的に削除する ----------
'次号に掲載します
End Sub
End Class
----------------------------------------------------------------------
■■ 次号予告 第18号(11月24日頃発行予定) ■■
1. VB.NETワンポイント
2. ADO.NET:Excelファイルの論理的な削除処理 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.