商品マスター検索の関数、社員マスターの検索の関数、得意先マスター検索の関数などをいくつか作れば分りますが、いくつも同様な関数を作ることになります。異なるところはSQL文に関係する部分です。関数の数が多いと修正するのも大変なことになります。
そこで商品マスター検索の関数を発展させて、複数のマスターテーブルでも利用できるようなデータベースアクセスクラスを作成して、マスター表検索メソッドを実装することにします。

レコード取得する部分を関数化してマスター表を検索するで作成したプログラムをさらに修正して、商品マスター表からレコードを取得する部分をクラスメソッド化します。
検索ボタンクリック処理の中で、レコード取得関数を呼び出す部分を、データベースアクセスクラスのレコード取得メソッドを呼び出すように修正します。
レコード取得メソッドを呼び出すときには、引数として、表(テーブル)名、キー列(フィールド)名、キー値を指定します。
Option Strict On Imports System.Data.SqlClient Imports System.Configuration ' 参照の追加で System.Configuration を追加 Public Class RetrievalFuntion Private Sub BtnRetrieval_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles BtnRetrieval.Click '------------------------------------------------------------- ' ■ 検索ボタンクリック処理 ■ '------------------------------------------------------------- ' 商品マスター表からレコード取得 Try Dim shohinTableIO As New ClsHanbaiKanriDBIO Dim dt As New DataTable dt = shohinTableIO.GetKeyData _
("商品マスター表","商品コード",TxtShohinCode.Text) If dt.Rows.Count = 1 Then ' レコードがあった時 LblShohinMei.Text = CStr(dt.Rows(0)("商品名称")) LblHanbaiTanka.Text = CStr(dt.Rows(0)("販売単価")) Else ' レコードが無かった時 LblShohinMei.Text = Nothing LblHanbaiTanka.Text = Nothing MessageBox.Show("データがありません","エラー") End If Catch ex As Exception MessageBox.Show(ex.ToString, "【例外発生】") End Try End Sub End Class
マスターテーブルアクセス関数を、レコード取得メソッドとして作り直します。
Option Strict On Imports System.Data.SqlClient Imports System.Configuration '[参照の追加]から追加 '//////////// 販売管理データベースアクセスクラス //////////// Public Class ClsHanbaiKanriDBIO '========================================================== ' 機能:コンストラクタ ' 引数:なし '========================================================== Public Sub New() MyBase.New() End Sub '******************************************************************** ' 機能:引数に指定したテーブルのキー値のレコードを取得する ' 引数:テーブル名 ' 引数:キーフィールド名 ' 引数:キー値 ' 戻値:取得したレコード ' 補足:テーブル名のキーフィールドはNChar型とする '******1*********2*********3*********4*********5**********6*********7 Public Function GetKeyData(ByVal tableName As String, _ ByVal keyField As String, _ ByVal keyValue As String) As DataTable Dim retDt As New DataTable 'リターン値 ' 接続文字列をapp.configファイルから取得 Dim settings As ConnectionStringSettings settings = ConfigurationManager.ConnectionStrings("販売管理ConString") If settings Is Nothing Then ' 接続文字列取得エラー Throw New Exception("app.configに未登録") End If '---<< テーブルからレコード取得 >>--- Using con As New SqlConnection Using cmd As New SqlCommand ' 接続文字列の設定 con.ConnectionString = settings.ConnectionString ' SqlCommand.Connectionプロパティの設定 cmd.Connection = con ' SQL文の設定 cmd.CommandText = "SELECT * FROM " & TableName & _ " WHERE " & KeyField & " = @keyValue" ' SQL文の引数設定 cmd.Parameters.Clear() ' パラメータの実際のサイズからデータ長を推論 cmd.Parameters.Add("@keyValue", SqlDbType.NChar) ' コマンド引数に値を設定 cmd.Parameters("@keyValue").Value = keyValue ' レコード取得 Dim da As New SqlDataAdapter da.SelectCommand = cmd da.Fill(retDt) End Using End Using ' ◆戻値を設定してリターン Return retDt End Function End Class
次はさらに改良して、コンストラクタに、表名、キー列名、キー値を引数として指定するように修正します。この変更でメソッド呼び出すときに引数が不要になります。
| ◆ DBアクセス TOP頁へ ◆ |
|---|
| ◆ SQL Server ◆ |
| Sql ExecuteScalar |
| Sql ExecuteReader |
| Sql ComboBox |
| Sql ListBox |
| Sql DataGridView |
| ◆ MDB ◆ |
| Ole ExecuteScalar |
| Ole ExecuteReader |
| Ole ComboBox |
| Ole ListBox |
| Ole DataGridView |
| ◆ 受注エントリー TOP頁 ◆ |
|---|
| テーブル定義 |
| データ接続の追加 |
| システム日付取得 |
| DataGridView列スタイル |
| フォームロード・初期化 |
| DBアクセス基本クラス |
| 商品クラス |
| 得意先クラス |
| 受注ディテールクラス |
| 受注ヘッダークラス |
| 受注伝票データクラス |
| 受注伝票アクセスクラス |
| 行確認・追加ボタン |
| 得意先確認・変更ボタン |
| 明細行変更・完了ボタン |
| 明細行削除ボタン |
| 受注登録ボタン |
| クリアボタン |