すぐ使えるADO.NET

【Visual BasicによるADO.NETデータベースプログラミング】

本の紹介

バックナンバー:VB.NETデータベースプログラミング

ADO.NETの基本的なプログラミングを中心に、すぐ使えるサンプルプログラム満載です。




【第5号】

 第5号(2004.5.11発行)
======================================================================
         ★★ VB.NETデータベースプログラミング奮闘記 ★★

----------------------------------------------------------------------
ADO.NETの基本的なプログラミングを中心に掲載します。
末永くご購読の程よろしくお願い申し上げます。

すぐ使えるADO.NETの研究 --> サンプルプログラム満載
                            http://park5.wakwak.com/‾weblab/
======================================================================
                        -----【目次】-----

1. VB.NETワンポイント:StringクラスのFormatメソッド
2. クラスメソッドの使い方
3. VB.NETワンポイントオブジェクト指向:Shared修飾子
4. 次号予告

----------------------------------------------------------------------
      ■■ VB.NETワンポイント:StringクラスのFormatメソッド ■■

Format関数と同様なFormatメソッドが、Stringクラスにあります。今回はこ
の便利なメソッドを紹介します。その前に、Format関数の注意点を2つ挙げ
ておきます。以下の例では、Dim str As String と宣言しています。

●VB.NETでは、Format関数は、文字列を数値に変換しません。
  str = Format("12345", "#,##0")         ' str = "#,##0"

  "12345"を数値に変換する必要があります。
  str = Format(CInt("12345"), "#,##0")   ' str = "12,345"

●数値を丸める時は、四捨五入になります。
  str = Format(1234.5, "#,##0")          ' str = "1,235"

  Dim d1 As Double = 0.125
  str = Format(d1, "#0%")                ' str = "13%"

それでは、Formatメソッドについて説明します。

●表示エリア9桁を確保して右詰で表示
  str = String.Format("{0,9:#,##0}", 12345)  ' str = "   12,345"

Formatメソッドの第一パラメータには、書式を指定します。書式は"{" と "}"
で囲んで、{N,桁数:書式}という文字列を使って整形後の文字列を表現します。

Nは、データ位置を特定します。書式は複数記述できますので、書式がひとつ
の時は、例のように、{0,桁数:書式}となります。

桁数のみの時は右詰で、マイナス符号付の桁数の時は、左詰になります。
"{"と"}"の前後には、任意の文字列を記述できます。桁数は省略できます。

●表示エリア9桁を確保して右詰で表示
  str = String.Format("{0,9:#,##0}", 12345)  ' str = "   12,345"

  str = String.Format("右詰9桁で表示:{0,9:#,##0}", 12345)
                             ' str = "右詰9桁で表示:   12,345"

●表示エリア9桁を確保して左詰で表示
  str = String.Format("{0,-9:#,##0}", 12345) ' str = "12,345   "

●表示エリア桁数を省略した場合
  str = String.Format("{0:#,##0}", 12345)    ' str = "12,345"

複数の書式の時は、{0,桁数:書式}{1,桁数:書式}{2,桁数:書式}〜
{N,桁数:書式}というように記述します。

●"{"と"}"の前後に任意の文字列を記述し、複数の書式を指定して表示
  Dim i As Integer = 12345
  Dim d2 As Double = 0.125
  str = _
  String.Format("1番目:{0,5:#,##0}、2番目:{1,4:#0%}", i, d2)
    ' --> str = "1番目:12,345、2番目: 13%"

Stringクラスには、文字列操作のメソッドが多数あり、非常に便利です。
是非、Stringクラスを研究してみて下さい。

文字列操作のサンプルは、下記ページにもありますので、参考にして下さい。
  http://park5.wakwak.com/‾weblab/tipsStringClass_mag.htm

----------------------------------------------------------------------
                   ■■ クラスメソッドの使い方 ■■

前回作成した消費税クラスの、Publicメソッドを使用したサンプルプログラム
を紹介します。消費税率クラスのメソッドは次のとおりです。

メソッド:消費税率取得(消費税率テーブルから消費税率を取得)
            Public Function getSyohiZeiRitu() As Single

メソッド:消費税額計算(プロパティの消費税率を使って、消費税額を計算)
            Public Function calcSyohiZeiGaku _
              (ByVal hontaiKingaku As Integer) As Integer

メソッド:税込額計算(消費税額計算メソッドを使って、税込額を計算)
            Public Function calcZeikomiGaku _
              (ByVal hontaiKingaku As Integer) As Integer

消費税クラスのソースリストは、前号または下記のページにあります。
  http://park5.wakwak.com/‾weblab/mailMagazine.htm

まず、VB.NETで、新規プロジェクトをひとつ作成してください。

ツールボックスから、以下のコントロールを貼り付け、
プロパティを設定します。

    コントロール      プロパティ  設定値
 ----------------------------------------------
    Label1            Text        売上日
    DateTimePicker1   ---         ---
    Label2            Text        本体価格
    txtHontaiGaku     TextAlign   Right
    Label3            Text        消費税額
    lblZeiGaku        TextAlign   MiddleRight
    Label4            Text        合計額
    lblGokeiGaku      TextAlign   MiddleRight
    Label5            Text        消費税率
    lblZeiRitu        TextAlign   MiddleRight
    btnKeisan         Text        計算

このプロジェクトに、新規にクラスモジュールclsSyohizei.vbを追加します。
このクラスに、前号紹介したclsSyohizeiクラスと、clsSyohizeiExceptionク
ラスを、コーディングします。

入力値のエラーチェックと、消費税額等の計算は、「計算」ボタンのクリッ
ク処理にコーディングします。入力する本体価格は、誤差のでないよう7桁
以内の整数でなければ、エラーにしています。

---------------------------------------【プログラムソースリスト】---
Imports System.Data.OleDb
Imports System.Text.RegularExpressions  '正規表現でエラーチェック

Public Class F_syohizei
  Inherits System.Windows.Forms.Form

#Region " Windows フォーム デザイナで生成されたコード "
  '自動生成部分省略
#End Region

  Private oSyohizei As clsSyohizei

  '-----------------------------------------------------------------
  '                       計算ボタン押下処理
  '-----------------------------------------------------------------
  Private Sub btnKeisan_Click(ByVal sender As System.Object, _
                              ByVal e As System.EventArgs) _
                                             Handles btnKeisan.Click
    Me.lblZeiRitu.Text = ""
    Me.lblZeiGaku.Text = ""
    Me.lblGokeiGaku.Text = ""

    '---------------【入力値のエラーチェック】---------------
    Dim torihikiGaku As Integer

    '前後の空白除去
    Me.txtHontaiGaku.Text = Trim(Me.txtHontaiGaku.Text)
    '金額の","を削除
    Me.txtHontaiGaku.Text = Me.txtHontaiGaku.Text.Replace(",", "")

    '売上額が7桁以内の整数ならば正常で、それ以外はエラー
    '正規表現 ^[+¥-]?[0-9]{1,7}$ について分かりやすく日本語で書くと、
    '^      ---> Me.txtHontaiGaku.Textの文字列の先頭に
    '[+¥-]? ---> + か - が1文字あってもなくてもよく(- は ¥- と書く)
    '[0-9]  ---> 0から9の数字が
    '{1,7}  ---> 1桁以上7桁以内で連続して
    '$      ---> 文字列で終わっている、となります。
    If Regex.IsMatch(Me.txtHontaiGaku.Text, "^[+¥-]?[0-9]{1,7}$") Then
      Me.txtHontaiGaku.Text = _
                  Format(CInt(Fix(Me.txtHontaiGaku.Text)), "#,##0")
      torihikiGaku = CInt(Fix(Me.txtHontaiGaku.Text))
    Else
      '---< エラー:指定範囲外の値が入力された時 >---
      Dim msg As String
      msg = "売上額は、7桁以内の数字で入力してください"
      MessageBox.Show(msg, "入力エラー")
      Me.txtHontaiGaku.Focus()
    End If

    '---------------【消費税の計算】---------------
    Try
      '消費税オブジェクトのインスタンスの参照を無効化
      oSyohizei = Nothing
      '売上日をパラメータに指定して、消費税オブジェクトを生成
      oSyohizei = New clsSyohizei(Me.DateTimePicker1.Value)

      '◆ 消費税率取得 ◆
      '消費税クラスの消費税率プロパティから消費税率を取得
      Dim zeiRitu As Single = oSyohizei.getSyohiZeiRitu()
      '消費税率を文字列に変換して、ラベルに表示する
      Me.lblZeiRitu.Text = String.Format("{0:#0.0%}", zeiRitu)

      '◆ 消費税額計算 ◆
      '売上額を引数に指定して、
      '消費税クラスの消費税額計算メソッドを呼び出す
      Dim zeiGaku As Decimal
      zeiGaku = oSyohizei.calcSyohiZeiGaku(torihikiGaku)
      '消費税額を文字列に変換して、ラベルに表示する
      Me.lblZeiGaku.Text = String.Format("{0:#,##0}", zeiGaku)

      '◆ 税込額計算 ◆
      '売上額を引数に指定して、
      '消費税クラスの税込額計算メソッドを呼び出す
      Dim gokeiGaku As Decimal
      gokeiGaku = oSyohizei.calcZeikomiGaku(torihikiGaku)
      '税込額を文字列に変換して、ラベルに表示する
      Me.lblGokeiGaku.Text = String.Format("{0:#,##0}", gokeiGaku)

    Catch oExcept As clsSyohizeiException
      '消費税率が消費税率テーブルに未登録の時
      MessageBox.Show(oExcept.ToString, "消費税率取得エラー")
      Me.txtHontaiGaku.Focus()

    Catch oExcept As Exception
      '上記以外の例外が発生した時の処理
      MessageBox.Show(oExcept.ToString, "エラー")
      Me.txtHontaiGaku.Focus()

    End Try

  End Sub

End Class

----------------------------------------------------------------------
        ■ VB.NETワンポイントオブジェクト指向:Shared修飾子 ■

StringクラスのFormatメソッドの定義は、Public Shared Function Format()
とShared修飾子が付いています。これは、メソッドがインスタンスを生成せず
直接呼び出せることを示しています。クラス名.メソッド名で、呼び出します。

  str = String.Format("{0:#,##0}", 12345)

一方、StringクラスのToLowerメソッドの定義は、Public Function ToLower()
でShared修飾子が付いていません。これは、インスタンスを生成しないと、
メソッドが呼び出せないことを示しています。インスタンス名.メソッド名で、
呼び出します。

  Dim str1 As String = "ABCDE"  ' Stringクラスのインスタンスstr1生成
  str1 = str1.ToLower           ' str1 = "abcde"

----------------------------------------------------------------------
                      ■■ 次号予告 ■■

第6号(5号発行日から10日以内を予定)  月3回位発行予定

1. VB.NETワンポイント
2. 社員テーブルから全レコードを取得する
       ◆ データテーブルオブジェクトDataTableを活用 ◆
3. VB.NETワンポイントオブジェクト指向

======================================================================
VB.NET データベースプログラミング奮闘記    第5号(2004.5.11)
          http://park5.wakwak.com/‾weblab/
----------------------------------------------------------------------
このメールマガジン(マガジンID: 0000128094)は、
インターネットの本屋さん『まぐまぐ』から配信されています。
  http://www.mag2.com/

【購読中止の方法】購読の中止は次のホームページからお願い致します。
  http://park5.wakwak.com/‾weblab/mailMagazine.htm
  http://www.mag2.com/m/0000128094.htm
----------------------------------------------------------------------
このメールマガジン及び、すぐ使えるADO.NETの研究ホームページで公開して
いるソースプログラム・データの利用により生じた損害等については、発行者
は一切責任を負いません。
ソースプログラムの再利用は自由ですが、著作権は発行者が所有します。
このメールマガジン及び、すぐ使えるADO.NETの研究ホームページに掲載され
ている会社名・製品名等は、各社の登録商標または商標です。
======================================================================

Copyright© すぐ使えるADO.NET. All rights reserved.