'***************************************************************************************************
' 配属一覧サンプル④(一覧表示) frmGetSqlDataTest01(Form)
'
' 作成者:井上治 URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
' 変更日付 Rev 変更履歴内容-------------------------------------------------------------------->
' 17/01/15(1.0.0.0)新規作成
' 17/01/22(1.0.1.0)更新登録画面追加に伴う修正
' 17/01/29(1.0.2.0)ダブルクリック抑制処置の共通クラス化対応
' 17/02/05(1.0.3.0)新規登録時は追加された行へスクロール位置を調整する対応
' 17/02/12(1.0.4.0)SQLServer用サンプルとして再作成
' 18/05/07(1.0.5.0)DataGridViewのスクロールバー表示不正の対応、初期処理をNewに移動させる対応
'***************************************************************************************************
Imports System.IO
Imports System.Data.SqlClient
Public Class frmGetSqlDataTest01
'===============================================================================================
Private Const g_cnsTitle As String = "配属一覧サンプル(SQLServer)①"
Private Const g_cnsDGVColumnMAX As Integer = 5 ' DataGridView最大カラム(表示)
'-----------------------------------------------------------------------------------------------
' 背景色
Private ReadOnly g_colorRetire As Color = Color.FromArgb(220, 220, 220) ' 退職色(薄灰)
'-----------------------------------------------------------------------------------------------
' 共通クラス
Private g_objAboutSQL As clsAboutSQL1 ' データベースI/Oクラス(SQLServer用)
Private g_objAboutWindow As clsAboutWindow1 ' ウィンドウ制御関連クラス
Private g_objAboutDGV As clsAboutDataGridView3 ' DataGridView制御関連クラス
Private g_objOmitDoubleClick As clsOmitDoubleClick2 ' ダブルクリック抑制クラス
' 詳細登録フォーム
Private g_objSYOUSAI_Form As dlgGetSqlDataTest01 = Nothing ' 詳細登録フォーム
'-----------------------------------------------------------------------------------------------
' 一覧表示用抽出SQL文共通部
Private g_strSQL_Base As String = "" ' 抽出SQL文共通部
'-----------------------------------------------------------------------------------------------
' デフォルトのカラム幅
Private g_tblDefaultColumnWidth() As Integer ' カラム幅テーブル
'***********************************************************************************************
' ■■■ 初期化 ■■■
'***********************************************************************************************
'* 処理名 :New
'* 機能 :初期化
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2018年05月07日
'* 作成者 :井上 治
'* 更新日 :2018年05月07日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Public Sub New()
'-------------------------------------------------------------------------------------------
' ※Windowsフォームデザイナ初期化(必須)
Call InitializeComponent()
' フォームデザイナモード時は以下をスキップする
If Me.DesignMode Then Exit Sub
'-------------------------------------------------------------------------------------------
' データベースI/Oクラスの初期化
g_objAboutSQL = New clsAboutSQL1(Me)
' ウィンドウ制御関連クラスの初期化
g_objAboutWindow = New clsAboutWindow1(Me)
' ダブルクリック抑制クラスの初期化
g_objOmitDoubleClick = New clsOmitDoubleClick2(Me)
' DataGridView制御関連クラスの初期化
g_objAboutDGV = New clsAboutDataGridView3
'-------------------------------------------------------------------------------------------
' DataGridView(登録一覧)のカラム設定
Dim tblColInfo() As g_typDGVColInfo = Nothing
With g_objAboutDGV
Call .SetColumnInfo(tblColInfo, "社員CD", 50, g_cnsDG_MC) ' (00)社員コード
Call .SetColumnInfo(tblColInfo, "氏名", 100, , _
g_cnsSM_Programmatic) ' (01)氏名
Call .SetColumnInfo(tblColInfo, "部署名", 150, , _
g_cnsSM_Programmatic) ' (02)部署名
Call .SetColumnInfo(tblColInfo, "役職名", 100, , _
g_cnsSM_Programmatic) ' (03)役職名
Call .SetColumnInfo(tblColInfo, "入社日", 90, g_cnsDG_MC) ' (04)入社日
Call .SetColumnInfo(tblColInfo, "退職日", 90, g_cnsDG_MC) ' (05)退職日
Call .SetColumnInfo(tblColInfo, "部署CD", 60, g_cnsDG_MC) ' (06)部署コード(非表示)
Call .SetColumnInfo(tblColInfo, "役職CD", 50, g_cnsDG_MC) ' (07)役職コード(非表示)
Call .SetColumnInfo(tblColInfo, "カナ氏名", 150) ' (08)カナ氏名(非表示)
Call .SetColumnInfo(tblColInfo, "開始日", 90, g_cnsDG_MC) ' (09)配属開始日
' 初期カラム幅設定を退避
g_tblDefaultColumnWidth = .GetDefaultColumnWidth(tblColInfo)
' 列幅を設定退避値で置き換える
Call .AdjustColumnWidth(tblColInfo, My.Settings.ICHIRAN_COL_Width)
'---------------------------------------------------------------------------------------
' DataGridViewの初期設定(一般一覧用)
Call .InitDataGridView1(DGV_ICHIRAN, tblColInfo, 1)
'---------------------------------------------------------------------------------------
' 半角英数列のフォントをMSゴシック10Pに変更
Dim objFont10 As Font = New Font(g_cnsStdFontName, g_cnsFontSize975) ' 英数項目用
' DataGridViewのその他調整
With DGV_ICHIRAN
' プログラムSORT列指定
.Columns(1).Tag = 8 ' 氏名⇒カナ氏名
.Columns(2).Tag = 6 ' 部署名⇒部署コード
.Columns(3).Tag = 7 ' 役職名⇒役職コード
' コード、日付列は当幅フォントに変更
.Columns(0).DefaultCellStyle.Font = objFont10
.Columns(4).DefaultCellStyle.Font = objFont10
.Columns(5).DefaultCellStyle.Font = objFont10
.Columns(6).DefaultCellStyle.Font = objFont10
.Columns(7).DefaultCellStyle.Font = objFont10
.Columns(9).DefaultCellStyle.Font = objFont10
' 部署コード以降は非表示
.Columns(6).Visible = False
.Columns(7).Visible = False
.Columns(8).Visible = False
.Columns(9).Visible = False
End With
'---------------------------------------------------------------------------------------
' 列配置を設定退避値で置き換える
Call .AdjustDGVColumnDisplayIndex(DGV_ICHIRAN, My.Settings.ICHIRAN_DisplayIndex)
End With
'-------------------------------------------------------------------------------------------
' 一覧表示用抽出SQL文共通部の編集(WHERE句の前まで)
g_strSQL_Base = "SELECT H.[SCD]" ' (00)社員コード
g_strSQL_Base &= ",S.[KANJI_SEI]+S.[KANJI_MEI]" ' (01)氏名(漢字)
g_strSQL_Base &= ",B.[BUSYO_NM]" ' (02)部署名
g_strSQL_Base &= ",Y.[YAKU_NM]" ' (03)役職名
g_strSQL_Base &= ",S.[NYUSYA_YMD]" ' (04)入社日
g_strSQL_Base &= ",S.[TAISYOKU_YMD]" ' (05)退職日
g_strSQL_Base &= ",H.[BUSYO_CD]" ' (06)部署コード
g_strSQL_Base &= ",H.[YAKU_CD]" ' (07)役職コード
g_strSQL_Base &= ",S.[KANA_SEI]+S.[KANA_MEI]" ' (08)氏名(カナ)
g_strSQL_Base &= ",H.[KAISHI_YMD]" ' (09)配属開始日
g_strSQL_Base &= g_cnsFROM & g_cnsDbnDbo & g_cnsMST_HAIZOKU & " AS H"
g_strSQL_Base &= g_cnsIN_JOIN & g_cnsDbnDbo & g_cnsMST_SYAIN & " AS S"
g_strSQL_Base &= " ON (H.[SCD]=S.[SCD])"
g_strSQL_Base &= g_cnsOUT_JOIN & g_cnsDbnDbo & g_cnsMST_BUSYO & " AS B"
g_strSQL_Base &= " ON (H.[BUSYO_CD]=B.[BUSYO_CD])"
g_strSQL_Base &= g_cnsOUT_JOIN & g_cnsDbnDbo & g_cnsMST_YAKU & " AS Y"
g_strSQL_Base &= " ON (H.[YAKU_CD]=Y.[YAKU_CD])"
End Sub
'***********************************************************************************************
' ■■■ フォームイベント ■■■
'***********************************************************************************************
'* 処理名 :Form_FormClosed
'* 機能 :フォーム消失(FormClosed)
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(デフォルト)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年01月15日
'* 作成者 :井上 治
'* 更新日 :2017年01月29日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Private Sub Form_FormClosed(ByVal sender As Object, _
ByVal e As FormClosedEventArgs) Handles Me.FormClosed
'-------------------------------------------------------------------------------------------
' DataGridViewの列幅、列配置等を退避
With My.Settings
.ICHIRAN_COL_Width = g_objAboutDGV.GetDGVColumnWidth(DGV_ICHIRAN)
.ICHIRAN_DisplayIndex = g_objAboutDGV.GetDGVColumnDisplayIndex(DGV_ICHIRAN)
Call g_objAboutWindow.FormSaveSettings1(.ICHIRAN_FormLocation, _
.ICHIRAN_FormSize, _
.ICHIRAN_WindowState)
' 設定を保存
.Save()
End With
'-------------------------------------------------------------------------------------------
' DataGridViewのColumnHeaderMouseClickイベントハンドラ解放(共通記述)
RemoveHandler DGV_ICHIRAN.ColumnHeaderMouseClick, _
AddressOf g_objAboutDGV.DGV_ColumnHeaderMouseClick
End Sub
'***********************************************************************************************
'* 処理名 :Form_Load
'* 機能 :フォーム初期化(Load)
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(デフォルト)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年01月15日
'* 作成者 :井上 治
'* 更新日 :2018年05月07日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Private Sub Form_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'-------------------------------------------------------------------------------------------
' フォーム位置・サイズ制御
With My.Settings
Call g_objAboutWindow.FormAdjustLocationSize1(.ICHIRAN_FormLocation, _
.ICHIRAN_FormSize, Me.Size)
Me.WindowState = .ICHIRAN_WindowState
End With
'-------------------------------------------------------------------------------------------
' DataGridViewのColumnHeaderMouseClickイベントハンドラ追加(共通記述)
AddHandler DGV_ICHIRAN.ColumnHeaderMouseClick, _
AddressOf g_objAboutDGV.DGV_ColumnHeaderMouseClick
End Sub
'***********************************************************************************************
'* 処理名 :Form_Shown
'* 機能 :フォーム初期表示(Shown)
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(デフォルト)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年01月15日
'* 作成者 :井上 治
'* 更新日 :2017年01月29日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Private Sub Form_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
'-------------------------------------------------------------------------------------------
' 一覧再更新表示
If Not FP_ListUpdate() Then
Me.Close()
Exit Sub
End If
'-------------------------------------------------------------------------------------------
' 初期表示動作完了
g_objOmitDoubleClick.Shown = True
End Sub
'***********************************************************************************************
' ■■■ コントロールイベント ■■■
'***********************************************************************************************
'* 処理名 :DGV_ICHIRAN_KeyUp
'* 機能 :グリッド表示のキーイベント(KeyUp)
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(デフォルト)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年01月22日
'* 作成者 :井上 治
'* 更新日 :2017年01月22日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Private Sub DGV_ICHIRAN_KeyUp(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyEventArgs) _
Handles DGV_ICHIRAN.KeyUp
'-------------------------------------------------------------------------------------------
' Ctrl+Cでコピーができないようにする。
If (e.Control AndAlso (e.KeyCode = Keys.C)) Then
' クリップボードをクリア
Clipboard.Clear()
End If
End Sub
'***********************************************************************************************
'* 処理名 :DGV_ICHIRAN_CellClick
'* 機能 :グリッド表示のイベント(CellClick)
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(デフォルト)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年01月22日
'* 作成者 :井上 治
'* 更新日 :2017年01月29日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Private Sub DGV_ICHIRAN_CellClick(ByVal sender As Object, _
ByVal e As DataGridViewCellEventArgs) _
Handles DGV_ICHIRAN.CellClick
'-------------------------------------------------------------------------------------------
' ダブルクリック等の多重操作を抑制
If g_objOmitDoubleClick.CheckDoubleClick() Then Exit Sub
'-------------------------------------------------------------------------------------------
' DataGridViewのセル選択
Dim intRow As Integer = e.RowIndex ' 行INDEX
' 選択行0件時はスキップ
If ((intRow < 0) OrElse (DGV_ICHIRAN.SelectedRows.Count = 0)) Then Exit Sub
' 処理中判定スイッチ対応
g_objOmitDoubleClick.OmitDoubleClick = True
'-------------------------------------------------------------------------------------------
' 詳細表示フォームを起動
Call GP_ShowEntryForm(intRow)
End Sub
'***********************************************************************************************
'* 処理名 :DGV_ICHIRAN_KeyDown
'* 機能 :グリッド表示のイベント(KeyDown)
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(デフォルト)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年01月22日
'* 作成者 :井上 治
'* 更新日 :2017年01月29日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Private Sub DGV_ICHIRAN_KeyDown(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyEventArgs) _
Handles DGV_ICHIRAN.KeyDown
'-------------------------------------------------------------------------------------------
' ダブルクリック等の多重操作を抑制
If g_objOmitDoubleClick.CheckDoubleClick() Then Exit Sub
'-------------------------------------------------------------------------------------------
' Enterキーでなければ処理なし
If ((e.KeyCode <> Keys.Enter) OrElse e.Shift) Then Exit Sub
' 表示0件時はスキップ
If DGV_ICHIRAN.SelectedCells.Count = 0 Then Exit Sub
e.Handled = True ' Enterキーで下行に移動させない
Dim intRow As Integer = DGV_ICHIRAN.SelectedCells.Item(0).RowIndex ' 行INDEX
' 行未選択でなければ処理なし
If intRow < 0 Then Exit Sub
' 処理中判定スイッチ対応
g_objOmitDoubleClick.OmitDoubleClick = True
'-------------------------------------------------------------------------------------------
' 詳細表示フォームを起動
Call GP_ShowEntryForm(intRow)
End Sub
'***********************************************************************************************
'* 処理名 :DGV_ICHIRAN_Leave
'* 機能 :グリッド表示のフォーカスアウトイベント(Leave)
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(デフォルト)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年01月22日
'* 作成者 :井上 治
'* 更新日 :2017年01月22日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Private Sub DGV_ICHIRAN_Leave(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles DGV_ICHIRAN.Leave
'-------------------------------------------------------------------------------------------
DGV_ICHIRAN.CurrentCell = Nothing
End Sub
'***********************************************************************************************
'* 処理名 :MNU_NEW_Click
'* 機能 :「新規登録」メニューイベント(Click)
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(デフォルト)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年02月05日
'* 作成者 :井上 治
'* 更新日 :2017年02月05日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Private Sub MNU_NEW_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles MNU_NEW.Click
'-------------------------------------------------------------------------------------------
' ダブルクリック等の多重操作を抑制
If g_objOmitDoubleClick.CheckDoubleClick() Then Exit Sub
'-------------------------------------------------------------------------------------------
' 詳細表示フォームを起動
Call GP_ShowEntryForm(-1)
End Sub
'***********************************************************************************************
' ■■■ サブ処理 ■■■
'***********************************************************************************************
'* 処理名 :FP_ListUpdate
'* 機能 :一覧再更新表示
'-----------------------------------------------------------------------------------------------
'* 返り値 :処理成否(Boolean)
'* 引数 :(なし)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年01月15日
'* 作成者 :井上 治
'* 更新日 :2018年05月07日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Private Function FP_ListUpdate() As Boolean
'-------------------------------------------------------------------------------------------
' 配属情報の抽出
Dim dbTbl As DataTable = Nothing ' DataTable
Dim strToday As String = FP_SQLDateSUB2(Today) ' 本日日付(編集)
Dim strSQL As String = g_strSQL_Base ' SQL文
strSQL &= " WHERE S.[NYUSYA_YMD]<=" & strToday
strSQL &= " AND (S.[TAISYOKU_YMD] IS NULL OR S.[TAISYOKU_YMD]>=" & strToday & g_cnsKO
strSQL &= " ORDER BY H.[BUSYO_CD],H.[YAKU_CD],H.[SCD];"
' DataTable取得
If Not g_objAboutSQL.GetDataTableSql(dbTbl, strSQL, g_cnsMST_HAIZOKU) Then Return False
'-------------------------------------------------------------------------------------------
Dim intIx As Integer = 0 ' テーブルINDEX
With DGV_ICHIRAN
' スクロールバーを一旦、非表示にする
.ScrollBars = ScrollBars.None
' DataGridViewを一旦、非表示にする
.Visible = False
' SORTマークを部署の昇順に設定
.Columns(2).HeaderCell.SortGlyphDirection = g_cnsSO_Ascending
' 他のプログラムソート列のSortマーク解除
.Columns(1).HeaderCell.SortGlyphDirection = g_cnsSO_None
.Columns(3).HeaderCell.SortGlyphDirection = g_cnsSO_None
' 前回の一覧をクリア
If .Rows.Count <> 0 Then .Rows.Clear()
' DataTableの全件を繰り返す
Do While intIx < dbTbl.Rows.Count
' 行を追加
.Rows.Add()
' 一覧再更新表示サブ(1行単位)
Call GP_ListUpdateSub(intIx, dbTbl.Rows(intIx).ItemArray.Clone)
' 次へ
intIx += 1
Loop
' DataGridViewを再表示にする
.Visible = True
' スクロールバーを再表示する
.ScrollBars = ScrollBars.Both
End With
' データテーブルをクリア
dbTbl.Clear()
dbTbl.Reset()
Return True
End Function
'***********************************************************************************************
'* 処理名 :GP_ShowEntryForm
'* 機能 :入力(参照)用フォーム表示
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :Arg1 = DataGridViewの行Index(Integer)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年01月22日
'* 作成者 :井上 治
'* 更新日 :2017年02月12日
'* 更新者 :井上 治
'* 機能説明:更新登録フォームを表示させる
'* 注意事項:
'***********************************************************************************************
Private Sub GP_ShowEntryForm(ByVal intRow As Integer)
'-------------------------------------------------------------------------------------------
Dim intUpdateMode As Integer = 1 ' 登録モード
Dim strScd As String = String.Empty ' 社員コード
' 行選択時は更新モードで動作
If intRow >= 0 Then
intUpdateMode = 2
strScd = DGV_ICHIRAN.Rows(intRow).Cells(0).Value
End If
'-------------------------------------------------------------------------------------------
' 詳細登録フォームを起動
If g_objSYOUSAI_Form Is Nothing Then
g_objSYOUSAI_Form = New dlgGetSqlDataTest01(g_objAboutSQL)
End If
With g_objSYOUSAI_Form
.prpUpdateMode = intUpdateMode
.prpScd = strScd
' 詳細画面を起動(モーダル)
.ShowDialog(Me)
' 処理中判定スイッチ対応
g_objOmitDoubleClick.OmitDoubleClick = True
' 更新が成功した場合、一覧再表示
If .prpUpdateResult <> 0 Then
Call GP_ListUpdate2(intRow, .prpScd, .prpNyusyaYmd)
End If
End With
End Sub
'***********************************************************************************************
'* 処理名 :GP_ListUpdate2
'* 機能 :一覧再更新表示(1行単位)
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :Arg1 = 更新行Index(Integer) ※新規登録時は-1
'* Arg2 = 社員コード(String)
'* Arg3 = 配属開始日(Date)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年01月22日
'* 作成者 :井上 治
'* 更新日 :2017年02月12日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Private Sub GP_ListUpdate2(ByVal intRow As Integer, _
ByVal strScd As String, _
ByVal dteKaishiYmd As Date)
'-------------------------------------------------------------------------------------------
' 配属の読み込み
Dim dbTbl As DataTable = Nothing ' DataTable
Dim strSQL As String = g_strSQL_Base ' SQL文
strSQL &= " WHERE H.[SCD]='" & strScd & g_cnsSC
strSQL &= " AND H.[KAISHI_YMD]=" & FP_SQLDateSUB2(dteKaishiYmd) & g_cnsCOL
' DataTable取得
If Not g_objAboutSQL.GetDataTableSql(dbTbl, strSQL, g_cnsMST_HAIZOKU) Then
Me.Close()
Exit Sub
End If
'-------------------------------------------------------------------------------------------
Dim blnNewRow As Boolean = False ' 新規登録判定
' 追加モード時はDataGridViewに行を追加
If intRow < 0 Then
blnNewRow = True
With DGV_ICHIRAN
intRow = .Rows.Count
.Rows.Add()
End With
End If
'-------------------------------------------------------------------------------------------
' 一覧再更新表示サブ(1行単位)
Call GP_ListUpdateSub(intRow, dbTbl.Rows(0).ItemArray.Clone)
' 新規登録時はスクロール位置を調整
If blnNewRow Then
Call g_objAboutDGV.ScrollToAddedRow(DGV_ICHIRAN, intRow)
End If
' データテーブルをクリア
dbTbl.Clear()
dbTbl.Reset()
End Sub
'***********************************************************************************************
'* 処理名 :GP_ListUpdateSub
'* 機能 :一覧再更新表示サブ(1行単位)
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :Arg1 = 行INDEX(Integer)
'* Arg2 = dbTbl.Rows(IX).ItemArray(Object)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年01月22日
'* 作成者 :井上 治
'* 更新日 :2017年01月22日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:FP_ListUpdateとGP_ListUpdate2から呼び出される
'***********************************************************************************************
Private Sub GP_ListUpdateSub(ByRef intRow As Integer, _
ByRef objItemArray As Object())
'-------------------------------------------------------------------------------------------
With DGV_ICHIRAN.Rows(intRow)
.Cells(0).Value = objItemArray(0) ' (00)社員コード
.Cells(1).Value = objItemArray(1) ' (01)氏名(漢字)
' 氏名(漢字)のToolTipに氏名(カナ)を設定
.Cells(1).ToolTipText = objItemArray(8)
.Cells(2).Value = objItemArray(2) ' (02)部署名
.Cells(3).Value = objItemArray(3) ' (03)役職名
.Cells(4).Value = FP_EditDate(objItemArray(4)) ' (04)入社日
.Cells(5).Value = FP_EditDate(objItemArray(5)) ' (05)退職日
.Cells(6).Value = objItemArray(6) ' (06)部署コード
.Cells(7).Value = objItemArray(7) ' (07)役職コード
.Cells(8).Value = objItemArray(8) ' (08)氏名(カナ)
.Cells(9).Value = FP_EditDate(objItemArray(9)) ' (09)配属開始日
' 退職者か(退職日有り)
If .Cells(5).Value.ToString.Length <> 0 Then
' 退職者はグレーで塗りつぶし
For intCol As Integer = 0 To g_cnsDGVColumnMAX
.Cells(intCol).Style.BackColor = g_colorRetire
Next intCol
End If
End With
End Sub
'----------------------------------------<< End of Source >>------------------------------------
End Class
プロシージャ | 内容 |
---|---|
フォーム初期化 (Form_Load) |
初期化するデータベースI/Oクラスが「clsAboutSQL1」に替わりました。 一覧表示用抽出SQL文共通部の編集で「FROM」句以降の記述がSQLServer用の記述に替わりました。 テーブル結合の括弧付けが要らなくなったことと、テーブルIDにデータベースID、スキーマIDを付加しています。 |
一覧再更新表示 (FP_ListUpdate) |
DataTable取得の呼び出しプロシージャが「g_objAboutSQL.GetDataTableSql」に替わりました。 |
入力(参照)用フォーム表示 (GP_ShowEntryForm) |
詳細登録フォームが「dlgGetSqlDataTest01」となり、引数で渡しているデータベースI/Oクラスが「clsAboutSQL1」に替わりました。 |
一覧再更新表示(1行単位) (GP_ListUpdate2) |
DataTable取得の呼び出しプロシージャが「g_objAboutSQL.GetDataTableSql」に替わりました。 |
'***************************************************************************************************
' 配属一覧サンプル③(更新登録画面) dlgGetSqlDataTest01(Form)
'
' 作成者:井上治 URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
' 変更日付 Rev 変更履歴内容-------------------------------------------------------------------->
' 17/02/05(1.0.3.0)新規作成
' 17/02/12(1.0.4.0)SQLServer用サンプルとして再作成
'***************************************************************************************************
Imports System.Data.SqlClient
Friend Class dlgGetSqlDataTest01
'===============================================================================================
Private Const g_cnsTitle As String = "配属一覧サンプル(SQLServer)①"
'-----------------------------------------------------------------------------------------------
' 登録モードなどの定数
Private Const g_cnsMODE_ADD As String = "(新規登録モード)"
Private Const g_cnsMODE_UPD As String = "(変更登録モード)"
'Private Const g_cnsMODE_DSP As String = "(参照モード)"
Private Const g_cnsGUIDE_ADD As String = "「登録」ボタンで登録されます。"
Private Const g_cnsGUIDE_UPD As String = "「登録」ボタンで内容が更新されます。"
'-----------------------------------------------------------------------------------------------
Private g_objAboutSQL As clsAboutSQL1 ' データベースI/Oクラス(SQLServer用)
Private g_objCheckNotUpdate As clsCheckNotUpdate2 ' 未更新終了チェック関連クラス
Private g_objOmitDoubleClick As clsOmitDoubleClick2 ' ダブルクリック抑制クラス
'-----------------------------------------------------------------------------------------------
' 一覧フォームとの受け渡し項目
Private g_intUpdateMode As Integer = 0 ' 処理モード(1=新規,2=変更)
Private g_strScd As String ' 社員コード
Private g_dteNyusyaYmd As Date ' 入社日
Private g_intUpdateResult As Integer = 0 ' 更新結果(0=無,1=追加,2=更新,9=削除)
'-----------------------------------------------------------------------------------------------
' コンボボックスに対応したコードテーブル
Private g_tblBusyoCd() As String ' 部署コードテーブル
Private g_tblYakuCd() As String ' 役職コードテーブル
'***********************************************************************************************
' ■■■ 初期化 ■■■
'***********************************************************************************************
'* 処理名 :New
'* 機能 :初期化
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :Arg1 = データベースI/Oクラス(Object)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年02月05日
'* 作成者 :井上 治
'* 更新日 :2017年02月12日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Friend Sub New(ByRef objAboutSQL As clsAboutSQL1)
'-------------------------------------------------------------------------------------------
' ※Windowsフォームデザイナ初期化(必須)
Call InitializeComponent()
' フォームデザイナモード時は以下をスキップする
If Me.DesignMode Then Exit Sub
'-------------------------------------------------------------------------------------------
g_objAboutSQL = objAboutSQL ' データベースI/Oクラス(SQLServer用)
'-------------------------------------------------------------------------------------------
' 未更新終了チェック関連クラスの初期化
g_objCheckNotUpdate = New clsCheckNotUpdate2(Me)
End Sub
'***********************************************************************************************
' ■■■ フォームイベント ■■■
'***********************************************************************************************
'* 処理名 :Form_Load
'* 機能 :フォームイベント(Load)
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(デフォルト)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年02月05日
'* 作成者 :井上 治
'* 更新日 :2017年02月05日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Private Sub Form_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'-------------------------------------------------------------------------------------------
' 一旦、登録ボタン等を消去
BTN_OK.Enabled = False
'-------------------------------------------------------------------------------------------
' ダブルクリック抑制クラスの初期化
g_objOmitDoubleClick = New clsOmitDoubleClick2(Me)
End Sub
'***********************************************************************************************
'* 処理名 :Form_Shown
'* 機能 :フォーム初期表示(Shown)
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(デフォルト)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年02月05日
'* 作成者 :井上 治
'* 更新日 :2017年02月05日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Private Sub Form_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
'-------------------------------------------------------------------------------------------
g_intUpdateResult = 0
'-------------------------------------------------------------------------------------------
' フォーム位置の保持
If Me.StartPosition <> FormStartPosition.Manual Then
Me.StartPosition = FormStartPosition.Manual
End If
'-------------------------------------------------------------------------------------------
' IME状態の初期化
TXT_KANJI_SEI.ImeMode = Windows.Forms.ImeMode.Hiragana
TXT_KANJI_MEI.ImeMode = Windows.Forms.ImeMode.Hiragana
TXT_KANA_SEI.ImeMode = Windows.Forms.ImeMode.Katakana
TXT_KANA_MEI.ImeMode = Windows.Forms.ImeMode.Katakana
'-------------------------------------------------------------------------------------------
' 初回起動時は初期セットアップを行なう
If g_objOmitDoubleClick.FirstShown Then
' コンボリスト等の初期セットアップ
If Not FP_SetFormList() Then
g_objCheckNotUpdate.FatalError = True
Me.Close()
Exit Sub
End If
g_objOmitDoubleClick.FirstShown = False
End If
'-------------------------------------------------------------------------------------------
' 新規登録モード
If g_intUpdateMode = 1 Then
' 内容表示クリア
Call GP_ClearForm()
Else
' 指定社員情報の表示
If Not FP_ShowSyainInfo() Then
g_objCheckNotUpdate.FatalError = True
Me.Close()
Exit Sub
End If
End If
' 入力コントロール表示制御
Call GP_SetFormCondition()
'-------------------------------------------------------------------------------------------
' 未登録終了警告スイッチをクリア
g_objCheckNotUpdate.NotUpdate = False
g_objOmitDoubleClick.Shown = True
End Sub
'***********************************************************************************************
' ■■■ コントロールイベント ■■■
'***********************************************************************************************
'* 処理名 :BTN_CANCEL_Click
'* 機能 :「キャンセル」ボタンイベント(Click)
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(デフォルト)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年02月05日
'* 作成者 :井上 治
'* 更新日 :2017年02月05日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Private Sub BTN_CANCEL_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles BTN_CANCEL.Click
'-------------------------------------------------------------------------------------------
' ダブルクリック等の多重操作を抑制
If g_objOmitDoubleClick.CheckDoubleClick(True) Then Exit Sub
'-------------------------------------------------------------------------------------------
' フォームを閉じる
Me.Close()
End Sub
'***********************************************************************************************
'* 処理名 :BTN_OK_Click
'* 機能 :「登録」ボタンイベント(Click)
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(デフォルト)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年02月05日
'* 作成者 :井上 治
'* 更新日 :2017年02月05日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Private Sub BTN_OK_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BTN_OK.Click
'-------------------------------------------------------------------------------------------
' ダブルクリック等の多重操作を抑制
If g_objOmitDoubleClick.CheckDoubleClick() Then Exit Sub
'-------------------------------------------------------------------------------------------
Me.Activate()
BTN_OK.Focus()
' 「登録」ボタン処理
Call GP_OK_Click()
End Sub
'***********************************************************************************************
' ■■■ サブ処理(登録更新系) ■■■
'***********************************************************************************************
'* 処理名 :GP_OK_Click
'* 機能 :「登録」ボタン処理
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年02月05日
'* 作成者 :井上 治
'* 更新日 :2017年02月05日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Private Sub GP_OK_Click()
'-------------------------------------------------------------------------------------------
If Not g_objCheckNotUpdate.NotUpdate Then
MessageBox.Show(Me, _
"何も変更されていません。", _
g_cnsTitle, _
MessageBoxButtons.OK, _
MessageBoxIcon.Information)
Exit Sub
ElseIf Not FP_CheckForm() Then ' 登録チェック
Exit Sub
End If
'-------------------------------------------------------------------------------------------
' 新規登録時は社員コードをプロパティ項目にセット
If g_intUpdateMode = 1 Then
g_strScd = TXT_SCD.Text.ToString.Trim
End If
g_dteNyusyaYmd = DTP_NYUSYA_YMD.Value
'-------------------------------------------------------------------------------------------
' 登録確認メッセージ
If MessageBox.Show( _
Me, _
"表示されている内容を登録します。" & _
ControlChars.CrLf & ControlChars.CrLf & "よろしいですね?", _
g_cnsTitle, _
MessageBoxButtons.YesNo, _
MessageBoxIcon.Information) <> DialogResult.Yes Then Exit Sub
' 処理中判定スイッチ対応
g_objOmitDoubleClick.OmitDoubleClick = True
'-------------------------------------------------------------------------------------------
' 登録(更新)処理
If FP_UpdateTables() Then
' 処理結果を返す
g_intUpdateResult = g_intUpdateMode
' 未登録終了警告スイッチをクリア
g_objCheckNotUpdate.NotUpdate = False
Me.Close()
End If
End Sub
'***********************************************************************************************
'* 処理名 :FP_CheckForm
'* 機能 :登録チェック
'-----------------------------------------------------------------------------------------------
'* 返り値 :チェック成否(Boolean)
'* 引数 :(なし)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年02月05日
'* 作成者 :井上 治
'* 更新日 :2017年02月05日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Private Function FP_CheckForm() As Boolean
'-------------------------------------------------------------------------------------------
Dim strMSG As String = String.Empty ' エラーメッセージ
'-------------------------------------------------------------------------------------------
' 必須チェック
' 新規登録時は社員コードチェックを行なう
If g_intUpdateMode = 1 Then
' 社員コードブランク
If TXT_SCD.Text.ToString.Trim.Length = 0 Then
Call GP_AppendMessage(strMSG, "「社員№」が入力されていません。")
ElseIf Not Integer.TryParse(TXT_SCD.Text.ToString.Trim, 0I) Then
Call GP_AppendMessage(strMSG, "「社員№」が数字ではありません。")
End If
End If
' 漢字姓
If TXT_KANJI_SEI.Text.ToString.Trim.Length = 0 Then
Call GP_AppendMessage(strMSG, "「漢字氏名(姓)」が入力されていません。")
End If
' 漢字名
If TXT_KANJI_MEI.Text.ToString.Trim.Length = 0 Then
Call GP_AppendMessage(strMSG, "「漢字氏名(名)」が入力されていません。")
End If
' カナ姓
If TXT_KANA_SEI.Text.ToString.Trim.Length = 0 Then
Call GP_AppendMessage(strMSG, "「カナ氏名(姓)」が入力されていません。")
End If
' カナ名
If TXT_KANA_MEI.Text.ToString.Trim.Length = 0 Then
Call GP_AppendMessage(strMSG, "「カナ氏名(名)」が入力されていません。")
End If
' 性別未選択
If CBO_SEX.SelectedIndex < 0 Then
Call GP_AppendMessage(strMSG, "「性別」が選択されていません。")
End If
' 部署未選択
If CBO_BUSYO.SelectedIndex < 0 Then
Call GP_AppendMessage(strMSG, "「部署」が選択されていません。")
End If
' 役職未選択
If CBO_YAKU.SelectedIndex < 0 Then
Call GP_AppendMessage(strMSG, "「役職」が選択されていません。")
End If
'-------------------------------------------------------------------------------------------
' 日付チェック
Dim dteSeinenYmd As Date = DTP_SEINEN_YMD.Value ' 生年月日
Dim dteNyusyaYmd As Date = DTP_NYUSYA_YMD.Value ' 入社日
Dim dteTaisyokuYmd As Date = g_cnsMaximumDate ' 退職日
' 退職日入力有り
If DTP_TAISYOKU_YMD.Checked Then
dteTaisyokuYmd = DTP_TAISYOKU_YMD.Value
If dteTaisyokuYmd = g_cnsMaximumDate Then
Call GP_AppendMessage(strMSG, "「退職日」が正しくありません。")
End If
End If
' 入社日異常
If dteNyusyaYmd <= dteSeinenYmd Then
Call GP_AppendMessage(strMSG, "「入社日」が「生年月日」以前です。")
ElseIf dteTaisyokuYmd <= dteNyusyaYmd Then
Call GP_AppendMessage(strMSG, "「退職日」が「入社日」以前です。")
End If
'-------------------------------------------------------------------------------------------
' チェック結果
If strMSG.Length <> 0 Then
MessageBox.Show(Me, _
strMSG, _
g_cnsTitle, _
MessageBoxButtons.OK, _
MessageBoxIcon.Exclamation)
Return False
Else
Return True
End If
End Function
'***********************************************************************************************
'* 処理名 :FP_UpdateTables
'* 機能 :登録(更新)処理
'-----------------------------------------------------------------------------------------------
'* 返り値 :処理成否(Boolean)
'* 引数 :(なし)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年02月05日
'* 作成者 :井上 治
'* 更新日 :2017年02月12日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Private Function FP_UpdateTables() As Boolean
'-------------------------------------------------------------------------------------------
Dim blnResult As Boolean = False ' 処理結果
Dim blnSuccess As Boolean = False ' 登録成否
Dim strMsgHeader As String = String.Empty ' メッセージヘッダ
Dim strMSG As String = String.Empty ' メッセージ
Dim strSQL As String = String.Empty ' SQL文
Dim strTable As String = String.Empty ' テーブル名
' SQLServer接続
Using dbCon As SqlConnection = g_objAboutSQL.GetConnection(blnResult)
' 接続失敗
If Not blnResult Then Return False
'---------------------------------------------------------------------------------------
' データベースに接続
dbCon.Open()
' トランザクション処理開始
Using dbTran As SqlTransaction = dbCon.BeginTransaction(), _
dbCommand As SqlCommand = dbCon.CreateCommand()
' コマンドにトランザクションを割り当てる
dbCommand.Transaction = dbTran
'-----------------------------------------------------------------------------------
Try
' データベーステーブル更新
blnSuccess = FP_UpdateTablesSUB(dbTran, _
dbCommand, _
strMsgHeader, _
strSQL, _
strTable, _
strMSG)
Catch ex As Exception
' 更新SQLエラー処理(致命エラー扱い)
Call g_objAboutSQL.ExecuteSQLError(ex.Message, _
strMsgHeader, _
strTable, _
strSQL)
End Try
'-----------------------------------------------------------------------------------
End Using
' データベースを切断
dbCon.Close()
'---------------------------------------------------------------------------------------
End Using
'-------------------------------------------------------------------------------------------
' エラーがあるか
If strMSG.Length <> 0 Then
' ここでのエラーには致命エラーは含まれない
MessageBox.Show(Me, _
strMSG, _
g_cnsTitle, _
MessageBoxButtons.OK, _
MessageBoxIcon.Exclamation)
End If
Return blnSuccess
End Function
'***********************************************************************************************
'* 処理名 :FP_UpdateTablesSUB
'* 機能 :データベーステーブル更新(サブ処理⇒更新本体)
'-----------------------------------------------------------------------------------------------
'* 返り値 :処理成否(Boolean)
'* 引数 :Arg1 = SqlTransaction(Object)
'* Arg2 = SqlCommand(Object)
'* Arg3 = メッセージヘッダ(String) ※Ref参照
'* Arg4 = SQL文(String) ※Ref参照
'* Arg5 = 更新テーブルID(String) ※Ref参照
'* Arg6 = エラーメッセージ(String) ※Ref参照(例外は含まれない)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年02月05日
'* 作成者 :井上 治
'* 更新日 :2017年02月12日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:例外発生時のSQL文を確保するためstrSQLはRef参照引数としている
'***********************************************************************************************
Private Function FP_UpdateTablesSUB(ByRef dbTran As SqlTransaction, _
ByRef dbCommand As SqlCommand, _
ByRef strMsgHeader As String, _
ByRef strSQL As String, _
ByRef strTable As String, _
ByRef strMSG As String) As Boolean
'===========================================================================================
FP_UpdateTablesSUB = False
strMSG = String.Empty
' 実際の内部登録モード(削除復活で置き換わることがある:このサンプルではないが)
Dim swUpdMode As Integer = g_intUpdateMode ' 実際の登録モード
strMsgHeader = g_cnsSQLMSG003 ' 参照失敗
Dim blnUpdate As Boolean = False ' 更新有りフラグ
Dim tblFldO() As Object = Nothing ' レコードフィールド
Dim tblSQL() As g_typUpdSql ' SQL文テーブル
ReDim tblSQL(-1)
'-------------------------------------------------------------------------------------------
' 現状レコードの読み出し
strTable = g_cnsMST_SYAIN
Dim strWhere As String = " WHERE [SCD]='" & g_strScd & g_cnsSC ' WHERE句
strSQL = g_cnsSELECT_AST & g_cnsDbnDbo & g_cnsMST_SYAIN
strSQL &= g_cnsWITHLOCK
strSQL &= strWhere & g_cnsCOL
' DataTableにレコードを読み込む
Dim dbTbl As DataTable = FP_GetDataTable(dbCommand, strSQL) ' DataTable
' 読込レコードがあるか
If dbTbl.Rows.Count <> 0 Then
'---------------------------------------------------------------------------------------
' 当該キーのレコード有り
If g_intUpdateMode <> 1 Then
' 更新登録は更新可
blnUpdate = True
' 最終的な変更前レコード内容の取得
tblFldO = dbTbl.Rows(0).ItemArray.Clone
' NULLがあり得る日付項目はNothingに変換
Call GP_ReplaceDateFields(tblFldO, New Integer() {8})
Else
strMSG = "この「社員№」は既に登録されています。"
End If
Else
'---------------------------------------------------------------------------------------
' 当該キーのレコード無し
If g_intUpdateMode = 1 Then
' 新規登録は登録可
blnUpdate = True
Else
strMSG = "この「社員№」は登録されていません。"
End If
End If
' データテーブルをクリア
dbTbl.Clear()
dbTbl.Reset()
' 更新不可の場合は終了
If Not blnUpdate Then Return False
'===========================================================================================
' 登録更新処理
'-------------------------------------------------------------------------------------------
' 更新SQL文の編集
If swUpdMode = 1 Then
' 新規登録 ⇒ 追加登録SQL文編集(社員マスタ)
Call GP_MakeInsertSqlS(tblSQL)
' 追加登録SQL文編集(配属マスタ)
Call GP_MakeInsertSqlH(tblSQL)
Else
' 更新登録 ⇒ 更新登録SQL文編集(社員マスタ)
Call GP_MakeUpdateSqlS(tblFldO, strWhere, tblSQL)
' 配属マスタを参照
strTable = g_cnsMST_HAIZOKU
strSQL = g_cnsSELECT_AST & g_cnsDbnDbo & g_cnsMST_HAIZOKU
strSQL &= g_cnsWITHLOCK
strSQL &= strWhere & g_cnsCOL
' DataTableにレコードを読み込む
dbTbl = FP_GetDataTable(dbCommand, strSQL) ' DataTable
' 読込レコードがあるか
If dbTbl.Rows.Count <> 0 Then
' 最終的な変更前レコード内容の取得
tblFldO = dbTbl.Rows(0).ItemArray.Clone
' NULLがあり得る日付項目はNothingに変換
Call GP_ReplaceDateFields(tblFldO, New Integer() {2})
' 更新登録SQL文編集(配属マスタ)
Call GP_MakeUpdateSqlH(tblFldO, strWhere, tblSQL)
Else
' 追加登録SQL文編集(配属マスタ)
Call GP_MakeInsertSqlH(tblSQL)
End If
End If
'-------------------------------------------------------------------------------------------
' 更新対象があるか
If tblSQL.Length <> 0 Then
strMsgHeader = g_cnsSQLMSG002
' 登録・更新SQL文を発行
For Each objSQL As g_typUpdSql In tblSQL
strTable = objSQL.TableId
strSQL = objSQL.SQL
' コマンド発行
dbCommand.CommandText = strSQL
dbCommand.ExecuteNonQuery()
Next objSQL
'---------------------------------------------------------
' コミット
dbTran.Commit()
Return True
Else
' 更新項目無し
strMSG = "更新対象項目がありませんでした。"
End If
End Function
'***********************************************************************************************
'* 処理名 :GP_MakeInsertSqlS
'* 機能 :追加登録SQL文編集(社員マスタ)
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :Arg1 = 更新SQL文テーブル(Array:Structure) ※Ref参照
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年02月05日
'* 作成者 :井上 治
'* 更新日 :2017年02月12日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Private Sub GP_MakeInsertSqlS(ByRef tblSQL() As g_typUpdSql)
'-------------------------------------------------------------------------------------------
' フォーム上のアイテムから更新用テーブルを作成(社員マスタ)
Dim tblFldN() As Object = FP_SetTableFromItemsS() ' 新規登録側テーブル
'-------------------------------------------------------------------------------------------
' INSERT文の編集
Dim strSQL As String = FP_SqlInsertCommon(g_cnsDbnDbo & g_cnsMST_SYAIN, _
g_tblFld_MST_SYAIN, _
True)
' 先頭フィールドをセット
strSQL &= g_cnsSC & tblFldN(0) & g_cnsSC
Dim intIx As Integer = 1 ' フィールドINDEX
' 以降を繰り返す
Do While intIx <= g_tblFld_MST_SYAIN.GetUpperBound(0)
' データタイプによる判断(このサンプルは文字列と日付のみ)
Select Case g_tblFldTyp_MST_SYAIN(intIx)
Case 5 ' 日付
strSQL &= g_cnsCOM & FP_SQLDateSUB2(tblFldN(intIx))
Case Else ' 文字列
strSQL &= g_cnsCOM & FP_SQLStringSUB(tblFldN(intIx))
End Select
' 次のフィールドへ
intIx += 1
Loop
strSQL &= g_cnsKOCOL
' 更新SQL文テーブルに追加
Call GP_AppendSqlTable(strSQL, g_cnsMST_SYAIN, tblSQL)
End Sub
'***********************************************************************************************
'* 処理名 :GP_MakeInsertSqlH
'* 機能 :追加登録SQL文編集(配属マスタ)
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :Arg1 = 更新SQL文テーブル(Array:Structure) ※Ref参照
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年02月05日
'* 作成者 :井上 治
'* 更新日 :2017年02月12日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Private Sub GP_MakeInsertSqlH(ByRef tblSQL() As g_typUpdSql)
'-------------------------------------------------------------------------------------------
' フォーム上のアイテムから更新用テーブルを作成(配属マスタ)
Dim tblFldN() As Object = FP_SetTableFromItemsH() ' 新規登録側テーブル
'-------------------------------------------------------------------------------------------
' INSERT文の編集
Dim strSQL As String = FP_SqlInsertCommon(g_cnsDbnDbo & g_cnsMST_HAIZOKU, _
g_tblFld_MST_HAIZOKU, _
True)
' 先頭フィールドをセット
strSQL &= g_cnsSC & tblFldN(0) & g_cnsSC
Dim intIx As Integer = 1 ' フィールドINDEX
' 以降を繰り返す
Do While intIx <= g_tblFld_MST_HAIZOKU.GetUpperBound(0)
' データタイプによる判断(このサンプルは文字列と日付のみ)
Select Case g_tblFldTyp_MST_HAIZOKU(intIx)
Case 5 ' 日付
strSQL &= g_cnsCOM & FP_SQLDateSUB2(tblFldN(intIx))
Case Else ' 文字列
strSQL &= g_cnsCOM & FP_SQLStringSUB(tblFldN(intIx))
End Select
' 次のフィールドへ
intIx += 1
Loop
strSQL &= g_cnsKOCOL
' 更新SQL文テーブルに追加
Call GP_AppendSqlTable(strSQL, g_cnsMST_HAIZOKU, tblSQL)
End Sub
'***********************************************************************************************
'* 処理名 :GP_MakeUpdateSqlS
'* 機能 :更新登録SQL文編集(社員マスタ)
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :Arg1 = 現行テーブル内容(Array:Object)
'* Arg2 = WHERE句(String)
'* Arg3 = 更新SQL文テーブル(Array:Structure) ※Ref参照
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年02月05日
'* 作成者 :井上 治
'* 更新日 :2017年02月12日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Private Sub GP_MakeUpdateSqlS(ByVal tblFldO() As Object, _
ByVal strWhere As String, _
ByRef tblSQL() As g_typUpdSql)
'-------------------------------------------------------------------------------------------
' フォーム上のアイテムから更新用テーブルを作成(社員マスタ)
Dim tblFldN() As Object = FP_SetTableFromItemsS() ' 新規登録側テーブル
'-------------------------------------------------------------------------------------------
' UPDATE文を編集
Dim strSQL As String = g_cnsUPDATE & g_cnsDbnDbo & g_cnsMST_SYAIN ' SQL文
strSQL &= g_cnsNOWAIT & g_cnsSET
Dim intIx As Integer = 1 ' フィールドINDEX
Dim intCntUpd As Integer = 0 ' 更新項目件数
' キー項目以後を繰り返す
Do While intIx <= g_tblFld_MST_SYAIN.GetUpperBound(0)
' 変更がある項目のみSQLに追加
If tblFldN(intIx) <> tblFldO(intIx) Then
' 更新項目件数を加算
intCntUpd += 1
' 2フィールド目以降はカンマを付加
If intCntUpd > 1 Then
strSQL &= g_cnsCOM
End If
' 値が変更されたフィールドのみ更新
strSQL &= g_tblFld_MST_SYAIN(intIx) & g_cnsEQ
' データタイプ判定
Select Case g_tblFldTyp_MST_SYAIN(intIx)
Case 5 ' 日付
strSQL &= FP_SQLDateSUB2(tblFldN(intIx))
Case Else ' 文字列
strSQL &= FP_SQLStringSUB(tblFldN(intIx))
End Select
End If
' 次のフィールドへ
intIx += 1
Loop
' 更新項目があったか
If intCntUpd <> 0 Then
' WHERE句を接続
strSQL &= strWhere
' 更新SQL文テーブルに追加
Call GP_AppendSqlTable(strSQL, g_cnsMST_SYAIN, tblSQL)
End If
End Sub
'***********************************************************************************************
'* 処理名 :GP_MakeUpdateSqlH
'* 機能 :更新登録SQL文編集(配属マスタ)
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :Arg1 = 現行テーブル内容(Array:Object)
'* Arg2 = WHERE句(String)
'* Arg3 = 更新SQL文テーブル(Array:Structure) ※Ref参照
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年02月05日
'* 作成者 :井上 治
'* 更新日 :2017年02月12日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Private Sub GP_MakeUpdateSqlH(ByVal tblFldO() As Object, _
ByVal strWhere As String, _
ByRef tblSQL() As g_typUpdSql)
'-------------------------------------------------------------------------------------------
' フォーム上のアイテムから更新用テーブルを作成(配属マスタ)
Dim tblFldN() As Object = FP_SetTableFromItemsH() ' 新規登録側テーブル
'-------------------------------------------------------------------------------------------
' UPDATE文を編集
Dim strSQL As String = g_cnsUPDATE & g_cnsDbnDbo & g_cnsMST_HAIZOKU ' SQL文
strSQL &= g_cnsNOWAIT & g_cnsSET
Dim intIx As Integer = 1 ' フィールドINDEX
Dim intCntUpd As Integer = 0 ' 更新項目件数
' キー項目以後を繰り返す(開始日の更新を含みます)
Do While intIx <= g_tblFld_MST_HAIZOKU.GetUpperBound(0)
' 変更がある項目のみSQLに追加
If tblFldN(intIx) <> tblFldO(intIx) Then
' 更新項目件数を加算
intCntUpd += 1
' 2フィールド目以降はカンマを付加
If intCntUpd > 1 Then
strSQL &= g_cnsCOM
End If
' 値が変更されたフィールドのみ更新
strSQL &= g_tblFld_MST_HAIZOKU(intIx) & g_cnsEQ
' データタイプ判定
Select Case g_tblFldTyp_MST_HAIZOKU(intIx)
Case 5 ' 日付
strSQL &= FP_SQLDateSUB2(tblFldN(intIx))
Case Else ' 文字列
strSQL &= FP_SQLStringSUB(tblFldN(intIx))
End Select
End If
' 次のフィールドへ
intIx += 1
Loop
' 更新項目があったか
If intCntUpd <> 0 Then
' WHERE句を接続
strSQL &= strWhere
' 更新SQL文テーブルに追加
Call GP_AppendSqlTable(strSQL, g_cnsMST_HAIZOKU, tblSQL)
End If
End Sub
'***********************************************************************************************
'* 処理名 :FP_SetTableFromItemsS
'* 機能 :フォーム上のアイテムから更新用テーブルを作成(社員マスタ)
'-----------------------------------------------------------------------------------------------
'* 返り値 :テーブル(Array:Object)
'* 引数 :(なし)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2013年12月05日
'* 作成者 :井上 治
'* 更新日 :2013年12月05日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Private Function FP_SetTableFromItemsS() As Object()
'-------------------------------------------------------------------------------------------
Dim tblFldN() As Object ' 新規登録側テーブル
ReDim tblFldN(g_tblFld_MST_SYAIN.GetUpperBound(0))
' 各フィールドをセット
tblFldN(0) = g_strScd ' (00)社員コード
tblFldN(1) = TXT_KANJI_SEI.Text.ToString.Trim ' (01)漢字姓
tblFldN(2) = TXT_KANJI_MEI.Text.ToString.Trim ' (02)漢字名
tblFldN(3) = TXT_KANA_SEI.Text.ToString.Trim ' (03)カナ姓
tblFldN(4) = TXT_KANA_MEI.Text.ToString.Trim ' (04)カナ名
tblFldN(5) = CBO_SEX.Text ' (05)性別
tblFldN(6) = DTP_SEINEN_YMD.Value ' (06)生年月日
tblFldN(7) = DTP_NYUSYA_YMD.Value ' (07)入社日
' 退職日
If DTP_TAISYOKU_YMD.Checked Then
tblFldN(8) = DTP_TAISYOKU_YMD.Value ' (08)退職日
Else
tblFldN(8) = g_cnsNullDate
End If
Return tblFldN
End Function
'***********************************************************************************************
'* 処理名 :FP_SetTableFromItemsH
'* 機能 :フォーム上のアイテムから更新用テーブルを作成(配属マスタ)
'-----------------------------------------------------------------------------------------------
'* 返り値 :テーブル(Array:Object)
'* 引数 :(なし)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2013年12月05日
'* 作成者 :井上 治
'* 更新日 :2013年12月05日
'* 更新者 :井上 治
'* 機能説明:このサンプルは入社日時点の配属を作成・更新するのみ
'* 注意事項:
'***********************************************************************************************
Private Function FP_SetTableFromItemsH() As Object()
Dim tblFldN() As Object ' 新規登録側テーブル
ReDim tblFldN(g_tblFld_MST_HAIZOKU.GetUpperBound(0))
' 各フィールドをセット
tblFldN(0) = g_strScd ' (00)社員コード
tblFldN(1) = DTP_NYUSYA_YMD.Value ' (01)開始日(入社日)
' 終了日
If DTP_TAISYOKU_YMD.Checked Then
tblFldN(2) = DTP_TAISYOKU_YMD.Value ' (02)終了日(退職日)
Else
tblFldN(2) = g_cnsNullDate
End If
tblFldN(3) = g_tblBusyoCd(CBO_BUSYO.SelectedIndex) ' (03)部署コード
tblFldN(4) = g_tblYakuCd(CBO_YAKU.SelectedIndex) ' (04)役職コード
Return tblFldN
End Function
'***********************************************************************************************
' ■■■ サブ処理(表示系) ■■■
'***********************************************************************************************
'* 処理名 :FP_ShowSyainInfo
'* 機能 :指定社員情報の表示
'-----------------------------------------------------------------------------------------------
'* 返り値 :処理成否(Boolean)
'* 引数 :(なし)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年02月05日
'* 作成者 :井上 治
'* 更新日 :2017年02月12日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Private Function FP_ShowSyainInfo() As Boolean
'-------------------------------------------------------------------------------------------
' 明細内容表示クリア
Call GP_ClearForm()
' 社員マスタ、配属マスタの現在状態を参照(入社日時点のみ)
Dim dbTbl As DataTable = Nothing ' DataTable
Dim strSQL As String = "SELECT S.[KANJI_SEI]" ' (00)漢字姓
strSQL &= ",S.[KANJI_MEI]" ' (01)漢字名
strSQL &= ",S.[KANA_SEI]" ' (02)カナ姓
strSQL &= ",S.[KANA_MEI]" ' (03)カナ名
strSQL &= ",S.[SEX]" ' (04)性別
strSQL &= ",S.[SEINEN_YMD]" ' (05)生年月日
strSQL &= ",S.[NYUSYA_YMD]" ' (06)入社日
strSQL &= ",S.[TAISYOKU_YMD]" ' (07)退職日
strSQL &= ",H.[BUSYO_CD]" ' (08)部署コード
strSQL &= ",H.[YAKU_CD]" ' (09)役職コード
strSQL &= g_cnsFROM & g_cnsDbnDbo & g_cnsMST_SYAIN & " AS S"
strSQL &= g_cnsOUT_JOIN & g_cnsDbnDbo & g_cnsMST_HAIZOKU & " AS H"
strSQL &= " ON (H.[SCD]=S.[SCD] AND H.[KAISHI_YMD]=S.[NYUSYA_YMD])"
strSQL &= " WHERE S.[SCD]='" & g_strScd & g_cnsSCCOL
' DataTable取得
If Not g_objAboutSQL.GetDataTableSql(dbTbl, strSQL, g_cnsMST_SYAIN) Then Return False
' 各コントロールに値をセット
TXT_SCD.Text = g_strScd ' 社員コード
TXT_KANJI_SEI.Text = dbTbl.Rows(0)(0) ' 漢字姓
TXT_KANJI_MEI.Text = dbTbl.Rows(0)(1) ' 漢字名
TXT_KANA_SEI.Text = dbTbl.Rows(0)(2) ' カナ姓
TXT_KANA_MEI.Text = dbTbl.Rows(0)(3) ' カナ名
CBO_SEX.Text = dbTbl.Rows(0)(4) ' 性別
DTP_SEINEN_YMD.Value = dbTbl.Rows(0)(5) ' 生年月日
DTP_NYUSYA_YMD.Value = dbTbl.Rows(0)(6) ' 入社日
' 退職判定?
If Not DBNull.Value.Equals(dbTbl.Rows(0)(7)) Then
DTP_TAISYOKU_YMD.Checked = True
DTP_TAISYOKU_YMD.Value = dbTbl.Rows(0)(7)
End If
' コンボボックスの選択をコードテーブルで行なう
Call GP_SetComboIndexByCode(CBO_BUSYO, dbTbl.Rows(0)(8), g_tblBusyoCd) ' 部署
Call GP_SetComboIndexByCode(CBO_YAKU, dbTbl.Rows(0)(9), g_tblYakuCd) ' 役職
Return True
End Function
'***********************************************************************************************
'* 処理名 :GP_SetFormCondition
'* 機能 :フォームの状態制御
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年02月05日
'* 作成者 :井上 治
'* 更新日 :2017年02月05日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:本サンプルでは参照モードの動作はありません
'***********************************************************************************************
Private Sub GP_SetFormCondition()
'-------------------------------------------------------------------------------------------
' 更新モードによる分岐
Select Case g_intUpdateMode
Case 1 ' 新規登録モード
' 社員コードは入力可
With TXT_SCD
.ReadOnly = False
.TabStop = True
.ForeColor = Color.Black
.BackColor = Color.Empty
.Select()
End With
STS_MODE.Text = g_cnsMODE_ADD
STS_GUIDE.Text = g_cnsGUIDE_ADD
BTN_OK.Enabled = True
'-----------------------------------------------------------------------------------
Case Else ' 更新登録モード
' 社員コードは入力不可
With TXT_SCD
.ReadOnly = True
.TabStop = False
.ForeColor = Color.Blue
.BackColor = Color.LightYellow
End With
TXT_KANJI_SEI.Select()
STS_MODE.Text = g_cnsMODE_UPD
STS_GUIDE.Text = g_cnsGUIDE_UPD
BTN_OK.Enabled = True
End Select
End Sub
'***********************************************************************************************
'* 処理名 :GP_ClearForm
'* 機能 :明細内容表示クリア
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年02月05日
'* 作成者 :井上 治
'* 更新日 :2017年02月05日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Private Sub GP_ClearForm()
'-------------------------------------------------------------------------------------------
TXT_SCD.Text = String.Empty
TXT_KANJI_SEI.Text = String.Empty
TXT_KANJI_MEI.Text = String.Empty
TXT_KANA_SEI.Text = String.Empty
TXT_KANA_MEI.Text = String.Empty
CBO_SEX.SelectedIndex = 0
DTP_SEINEN_YMD.Value = Today
DTP_NYUSYA_YMD.Value = Today
' 退職日は一旦チェックを付けて最大日付をセットしてからチェックを外す
With DTP_TAISYOKU_YMD
.Checked = True
.Value = g_cnsMaximumDate
.Checked = False
End With
CBO_BUSYO.SelectedIndex = -1
CBO_YAKU.SelectedIndex = -1
End Sub
'***********************************************************************************************
'* 処理名 :FP_SetFormList
'* 機能 :コンボリスト等の初期セットアップ
'-----------------------------------------------------------------------------------------------
'* 返り値 :処理成否(Boolean)
'* 引数 :(なし)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年02月05日
'* 作成者 :井上 治
'* 更新日 :2017年02月12日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Private Function FP_SetFormList() As Boolean
'-------------------------------------------------------------------------------------------
' 部署コンボリストの生成
Dim dbTbl As DataTable = Nothing ' DataTable
Dim strSQL As String = "SELECT [BUSYO_CD]" ' (00)部署コード
strSQL &= ",[BUSYO_NM]" ' (01)部署名
strSQL &= g_cnsFROM & g_cnsDbnDbo & g_cnsMST_BUSYO
strSQL &= " ORDER BY [BUSYO_CD];"
' DataTable取得
If Not g_objAboutSQL.GetDataTableSql(dbTbl, strSQL, g_cnsMST_BUSYO) Then Return False
' コンボボックスのリストセット
Call GP_SetComboBoxList(CBO_BUSYO, dbTbl, g_tblBusyoCd)
'-------------------------------------------------------------------------------------------
' 役職コンボリストの生成
strSQL = "SELECT [YAKU_CD]" ' (00)役職コード
strSQL &= ",[YAKU_NM]" ' (01)役職名
strSQL &= g_cnsFROM & g_cnsDbnDbo & g_cnsMST_YAKU
strSQL &= " ORDER BY [YAKU_CD];"
' DataTable取得
If Not g_objAboutSQL.GetDataTableSql(dbTbl, strSQL, g_cnsMST_YAKU) Then Return False
' コンボボックスのリストセット
Call GP_SetComboBoxList(CBO_YAKU, dbTbl, g_tblYakuCd)
dbTbl.Clear()
dbTbl.Reset()
Return True
End Function
'***********************************************************************************************
' プロパティ
'***********************************************************************************************
' 処理モード(1=新規,2=変更)(Integer)
'-----------------------------------------------------------------------------------------------
Friend WriteOnly Property prpUpdateMode As Integer
Set(value As Integer)
g_intUpdateMode = value
End Set
End Property
'===============================================================================================
' 社員コード(String)
'-----------------------------------------------------------------------------------------------
Friend Property prpScd As String
Get
Return g_strScd
End Get
Set(value As String)
g_strScd = value
End Set
End Property
'===============================================================================================
' 入社日(Date)
'-----------------------------------------------------------------------------------------------
Friend ReadOnly Property prpNyusyaYmd As Date
Get
Return g_dteNyusyaYmd
End Get
End Property
'===============================================================================================
' 更新結果(0=無,1=追加,2=更新,9=削除)(Integer)
'-----------------------------------------------------------------------------------------------
Friend ReadOnly Property prpUpdateResult As Integer
Get
Return g_intUpdateResult
End Get
End Property
'----------------------------------------<< End of Source >>------------------------------------
End Class
プロシージャ | 内容 |
---|---|
初期化 (New) |
引数受け渡しのデータベースI/O関連クラスが「clsAboutSQL1」に替わっています。 |
登録(更新)処理 (FP_UpdateTables) |
データベースのコネクションが「SqlConnection」、トランザクションが「SqlTransaction」、コマンドが「SqlCommand」にそれぞれ替わっています。 データベースI/O関連クラスの呼び出し名が「g_objAboutSQL」に替わっています。 実は、ここから下位のプロシージャでは「Try~Catch」等の例外判定を行なっていません。 もし、ここから下位のプロシージャで例外が発生した時は、このプロシージャでトラップされるように仕掛けています。 その例外発生時のテーブルIDやSQL文もRef参照の引数で通じているので、例外トラップ時には通報やログ出力に連動できるようになっています。 |
データベーステーブル更新 (サブ処理⇒更新本体) (FP_UpdateTablesSUB) |
引数の型が「SqlTransaction」、「SqlCommand」にそれぞれ替わっています。 現状レコードの読み出しのSQL文編集に排他制御のための「WITH(ROWLOCK,UPDLOCK)」を追加しています。 ここでは登録しようとしているレコードをメインキーで再度呼び出して、新規登録だったら既に存在しないか、更新登録だったら呼び出し以後に他者が更新していないかなどをチェックします。 さらに更新登録の場合は、実際の画面上の更新と個々の項目ごとに比較できるように下位プロシージャにレコード内容をテーブルとして渡します。 |
追加登録SQL文編集(社員マスタ、配属マスタ) (GP_MakeInsertSqlS、GP_MakeInsertSqlH) |
INSERT文共通部編集プロシージャ(FP_SqlInsertCommon)の呼び出しに第3引数の「True」を追加しています。 登録しようとする画面上の項目内容は「FP_SetTableFromItems」で「テーブル定義書」の順位でテーブル化されており、このプロシージャではこれを定義の項目タイプに従って INSERT文のフィールド値として編集していきます。 「テーブル定義書」から作成された項目定義テーブルはこのページの最後に紹介していますが、「ExcelSQLServerツール」を使えば自動作成されるものです。 このプロシージャは項目タイプの増減以外にはテーブルのフィールドの増減に影響されず、どの処理でも定例的な記述で処理が行なえるものです。 |
更新登録SQL文編集(社員マスタ、配属マスタ) (GP_MakeUpdateSqlS、GP_MakeUpdateSqlH) |
SQL文の編集に「WITH(NOWAIT)」を追加しています。 このページで紹介している方法は、画面上で更新されたものと直前に読み出したレコードとをフィールド単位に比較して変更があったフィールドのみUPDATE文に編集するという方法を採っています。 SQL文を編集するためのフィールドID定義や項目タイプ定義の固定テーブルが必要なのですが、 これについてはこのページの最後に紹介していますが、「ExcelSQLServerツール」を使えば自動作成されるものです。 このプロシージャは項目タイプの増減以外にはテーブルのフィールドの増減に影響されず、どの処理でも定例的な記述で処理が行なえるものです。 |
指定社員情報の表示 (FP_ShowSyainInfo) |
SQL文の編集で「FROM」句以降の記述がSQLServer用の記述に替わりました。一覧表示と同様です。 DataTable取得の呼び出しプロシージャが「g_objAboutSQL.GetDataTableSql」に替わりました。 |
コンボリスト等の初期セットアップ (FP_SetFormList) |
SQL文の編集で「FROM」句以降の記述がSQLServer用の記述に替わりました。一覧表示と同様です。 DataTable取得の呼び出しプロシージャが「g_objAboutSQL.GetDataTableSql」に替わりました。 |
'***************************************************************************************************
' サンプル用データベースI/O関連定数(SQLServer用) modAboutSQL1(Module)
'
' 作成者:井上治 URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
' ※この下に「データベースI/Oクラス(SQLServer用)(clsAboutSQL1)」があります
'***************************************************************************************************
' 変更日付 Rev 変更履歴内容-------------------------------------------------------------------->
' 17/01/15(1.0.0.0)新規作成
' 17/01/22(1.0.3.0)FP_GetDataTable、GP_AppendSqlTable等を追加(更新登録機能対応)
' 17/02/05(1.0.3.0)FP_SqlInsertCommonの追加(更新登録機能対応)
' 17/02/12(1.0.4.0)SQLServer用として再作成
'***************************************************************************************************
Imports System.IO
Imports System.Data.SqlClient
Module modAboutSQL1
'===============================================================================================
' WorkTable名
Friend Const g_cnsSqlTempTable1 As String = "SqlTempTable1"
Friend Const g_cnsSqlTempTable2 As String = "SqlTempTable2"
Friend Const g_cnsSqlTempTable3 As String = "SqlTempTable3"
' エラーメッセージ
Friend Const g_cnsSQLMSG001 As String = "データベースに接続できませんでした。"
Friend Const g_cnsSQLMSG002 As String = "データベースの更新に失敗しました。"
Friend Const g_cnsSQLMSG003 As String = "データベースの参照に失敗しました。"
Friend Const g_cnsSQLMSG011 As String = "このコードのデータは既に登録されています。"
Friend Const g_cnsSQLMSG012 As String = "このコードのデータは登録されていません。"
Friend Const g_cnsSQLMSG013 As String = "このコードのデータは既に削除済みです。"
Friend Const g_cnsSQLMSG021 As String = "出力対象データが存在しません。"
' SQL共通利用固定文字
Friend Const g_cnsKA As String = "("
Friend Const g_cnsKO As String = ")"
Friend Const g_cnsKA2 As String = "["
Friend Const g_cnsKO2 As String = "]"
Friend Const g_cnsFROM As String = " FROM "
Friend Const g_cnsWHERE As String = " WHERE "
Friend Const g_cnsSET As String = " SET "
Friend Const g_cnsIN_JOIN As String = " INNER JOIN "
Friend Const g_cnsOUT_JOIN As String = " LEFT OUTER JOIN "
Friend Const g_cnsAND As String = " AND "
Friend Const g_cnsOR As String = " OR "
Friend Const g_cnsSELECT As String = "SELECT "
Friend Const g_cnsSELECT_AST As String = "SELECT * FROM "
Friend Const g_cnsINSERT As String = "INSERT INTO "
Friend Const g_cnsUPDATE As String = "UPDATE "
Friend Const g_cnsDELETE As String = "DELETE FROM "
Friend Const g_cnsWITHLOCK As String = " WITH(ROWLOCK,UPDLOCK)"
Friend Const g_cnsNOWAIT As String = " WITH(NOWAIT)"
Friend Const g_cnsCOM As String = ","
Friend Const g_cnsSC As String = "'"
Friend Const g_cnsCOMSC As String = ",'"
Friend Const g_cnsSCCOM As String = "',"
Friend Const g_cnsSCCOMSC As String = "','"
Friend Const g_cnsNULL As String = "NULL"
Friend Const g_cnsCOMNULL As String = g_cnsCOM & g_cnsNULL
Friend Const g_cnsSCCOL As String = "';"
Friend Const g_cnsCOL As String = ";"
Friend Const g_cnsKOCOL As String = ");"
Friend Const g_cnsEQ As String = "="
Friend Const g_cnsEQSC As String = "='"
Friend Const g_cnsPERSC As String = "%'"
Friend Const g_cnsSCPER As String = "'%"
'-----------------------------------------------------------------------------------------------
' 更新SQL文収容テーブルユーザー定義
Friend Structure g_typUpdSql
Dim TableId As String ' 更新テーブルID
Dim SQL As String ' 更新SQL文
End Structure
'***********************************************************************************************
' ■■■ SQLServer更新関連サブ処理 ■■■
'***********************************************************************************************
'* 処理名 :FP_GetDataTable
'* 機能 :SqlCommandからDataTableを取得
'-----------------------------------------------------------------------------------------------
'* 返り値 :DataTable(Object)
'* 引数 :Arg1 = SqlCommand(Object)
'* Arg2 = SQLのSELECT文(String)
'* Arg3 = データテーブル名(String) ※Option(※)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年01月22日
'* 作成者 :井上 治
'* 更新日 :2017年02月12日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:本処理内で例外は判定していない
'***********************************************************************************************
Friend Function FP_GetDataTable(ByRef dbCommand As SqlCommand, _
ByVal strSQL As String, _
Optional ByVal strWorkTable As String = g_cnsSqlTempTable1) _
As DataTable
'-------------------------------------------------------------------------------------------
dbCommand.CommandText = strSQL
Using dbDAdp As New SqlDataAdapter, dbDSet As New DataSet
' DataSetを取得
dbDAdp.SelectCommand = dbCommand
dbDAdp.Fill(dbDSet, strWorkTable)
' DataTableを返す
FP_GetDataTable = dbDSet.Tables(strWorkTable)
End Using
End Function
'***********************************************************************************************
'* 処理名 :GP_AppendSqlTable
'* 機能 :更新用SQL文テーブルにSQL文を追加
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :Arg1 = 追加するSQL文(String)
'* Arg2 = 追加するテーブルID(String)
'* Arg3 = SQL文テーブル(Array:g_typUpdSql)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年01月22日
'* 作成者 :井上 治
'* 更新日 :2017年01月22日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Friend Sub GP_AppendSqlTable(ByVal strSQL As String, _
ByVal strTableId As String, _
ByRef tblSQL() As g_typUpdSql)
'-------------------------------------------------------------------------------------------
Dim intMax As Integer = tblSQL.Length ' テーブル最大要素(追加)
ReDim Preserve tblSQL(intMax)
With tblSQL(intMax)
.TableId = strTableId
.SQL = strSQL
End With
End Sub
'***********************************************************************************************
'* 処理名 :FP_SQLStringSUB
'* 機能 :SQL文文字列項目補助処理
'-----------------------------------------------------------------------------------------------
'* 返り値 :SQL文用項目文字列(String)
'* 引数 :Arg1 = 入力項目文字列(String)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年01月22日
'* 作成者 :井上 治
'* 更新日 :2017年01月22日
'* 更新者 :井上 治
'* 機能説明:Trim処理及びシングルクォーテーション二重化
'* 注意事項:前後にシングルクォーテーションが付加されます。
'***********************************************************************************************
Friend Function FP_SQLStringSUB(ByVal strInText As String) As String
'-------------------------------------------------------------------------------------------
Dim strInText2 As String = String.Empty & strInText
FP_SQLStringSUB = g_cnsSC & strInText2.Trim.Replace("'", "''") & g_cnsSC
End Function
'***********************************************************************************************
'* 処理名 :FP_SQLDateSUB2
'* 機能 :SQL文日付項目補助処理
'-----------------------------------------------------------------------------------------------
'* 返り値 :SQL文用項目文字列(String)
'* 引数 :Arg1 = 入力項目日付(Date)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年01月22日
'* 作成者 :井上 治
'* 更新日 :2017年01月22日
'* 更新者 :井上 治
'* 機能説明:Trim処理及び日付書式フォーマット
'* 注意事項:前後にシングルクォーテーションが付加されます。
'***********************************************************************************************
Friend Function FP_SQLDateSUB2(ByVal dteInDate As Date) As String
'-------------------------------------------------------------------------------------------
If dteInDate <> g_cnsNullDate Then
Return g_cnsSC & dteInDate.ToString(g_cnsFormatDate) & g_cnsSC
Else
Return g_cnsNULL
End If
End Function
'***********************************************************************************************
'* 処理名 :FP_SqlInsertCommon
'* 機能 :SQL(INSERT)文共通部編集
'-----------------------------------------------------------------------------------------------
'* 返り値 :SQL文一部文字列(String)
'* 引数 :Arg1 = テーブルID(string)
'* Arg2 = フィールド名配列(Array:String)
'* Arg3 = NOWAIT追加(Boolean) ※Option
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年02月05日
'* 作成者 :井上 治
'* 更新日 :2017年02月12日
'* 更新者 :井上 治
'* 機能説明:"INSERT INTO"から"VALUES ("までを編集
'* 注意事項:
'***********************************************************************************************
Friend Function FP_SqlInsertCommon(ByVal strTableId As String, _
ByRef tblFieldId() As String, _
Optional ByVal blnNoWait As Boolean = False) As String
'-------------------------------------------------------------------------------------------
' INSERT文の先頭から編集
Dim strSQL As String = g_cnsINSERT & strTableId
If blnNoWait Then
strSQL &= g_cnsNOWAIT
End If
strSQL &= " (" & tblFieldId(0)
Dim intIx As Integer = 1 ' テーブルINDEX
' フィールドIDを
Do While intIx <= tblFieldId.GetUpperBound(0)
strSQL &= g_cnsCOM & tblFieldId(intIx)
intIx += 1
Loop
strSQL &= ") VALUES ("
Return strSQL
End Function
'---------------------------------------<< End of Source >>-------------------------------------
End Module
'***************************************************************************************************
' サンプル用データベースI/Oクラス(SQLServer用) clsAboutSQL1(Class)
'
' 作成者:井上治 URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
' 変更日付 Rev 変更履歴内容-------------------------------------------------------------------->
' 17/01/15(1.0.0.0)新規作成
' 17/01/22(1.0.3.0)GetConnection、ExecuteSQLErrorの追加(更新登録機能対応)
' 17/02/12(1.0.4.0)SQLServer用として再作成
' 18/04/25(1.0.4.1)SQLServer認証での接続文字列をコメントサンプルで追加
'***************************************************************************************************
Friend Class clsAboutSQL1
'===============================================================================================
' SQLServer接続情報(このサンプルではWindows認証、ローカルサーバ(SQLEXPRESS)としています)
Private Const g_cnsSQLConnection As String = "Trusted_Connection=Yes;" & _
"Data Source=.\SQLEXPRESS;" & _
"persist security info=False;" & _
"Initial Catalog=SampleCorp1;"
'' SQLServer接続情報(このサンプルではSQLServer認証、自己PC内(SQLEXPRESS)としています)
'Private Const g_cnsSQLConnection As String = "Data Source=localhost\SQLEXPRESS;" & _
' "Initial Catalog=SampleCorp1;" & _
' "User ID=TEST001;" & _
' "Password=HogeHoge;"
'-----------------------------------------------------------------------------------------------
Private g_objOwnerForm As Form = Nothing ' 親フォーム
'***********************************************************************************************
' ■■■ 初期化 ■■■
'***********************************************************************************************
'* 処理名 :New
'* 機能 :初期化
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :Arg1 = 親フォーム(Object)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年01月15日
'* 作成者 :井上 治
'* 更新日 :2017年02月12日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Friend Sub New(ByVal objOwnerForm As Form)
'-------------------------------------------------------------------------------------------
g_objOwnerForm = objOwnerForm
End Sub
'***********************************************************************************************
' ■■■ SQLServerアクセス関連共通サブ処理 ■■■
'***********************************************************************************************
'* 処理名 :GetDataTableSql
'* 機能 :データテーブルを取得(SQLServer非接続処理)
'-----------------------------------------------------------------------------------------------
'* 返り値 :処理成否(Boolean)
'* 引数 :Arg1 = DataTable(Object) ※Ref参照(戻り値)
'* Arg2 = SQL文(String)
'* Arg3 = 参照テーブルID(String) ※カッコ付きテーブル名
'* Arg4 = エラーメッセージ(String) ※Option(エラー表示させない時の通知用)
'* Arg5 = データテーブル名(String) ※Option
'* Arg6 = エラー表示スイッチ(Boolean) ※Option(内部でエラー表示させる)
'* Arg7 = 無データエラースイッチ(Boolean) ※Option(0件をエラー扱いにしない)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年01月15日
'* 作成者 :井上 治
'* 更新日 :2017年02月12日
'* 更新者 :井上 治
'* 機能説明:データテーブル名は"SqlTempTable1"がデフォルト
'* 注意事項:
'***********************************************************************************************
Friend Function GetDataTableSql(ByRef dbTbl As DataTable, _
ByVal strSQL As String, _
ByVal strTableName As String, _
Optional ByRef strFatalErrMSG As String = "", _
Optional ByVal strWorkTable As String = g_cnsSqlTempTable1, _
Optional ByVal swDispError As Boolean = True, _
Optional ByVal swNoDataError As Boolean = False) As Boolean
'-------------------------------------------------------------------------------------------
Dim strMSG As String = g_cnsSQLMSG001 ' エラーメッセージ
dbTbl = Nothing
Using dbCon As New SqlConnection, dbDSet As New DataSet
Try
'-----------------------------------------------------------------------------------
' SQLServerコネクションを取得
dbCon.ConnectionString = g_cnsSQLConnection
'-----------------------------------------------------------------------------------
' 参照SQLの発行(DataAdapter)
strMSG = g_cnsSQLMSG003
Using dbDAdp As New SqlDataAdapter(strSQL, dbCon)
' DataSetを取得
dbDAdp.Fill(dbDSet, strWorkTable)
' DataTableを返す
dbTbl = dbDSet.Tables(strWorkTable)
' 0件確認
If (swNoDataError AndAlso (dbTbl.Rows.Count = 0)) Then
' 0件をエラーとする場合の処置
strFatalErrMSG = g_cnsSQLMSG021 & FP_ChangeRoundBrackets(strTableName)
' メッセージ表示
If swDispError Then
MessageBox.Show(g_objOwnerForm, _
strFatalErrMSG, _
g_objOwnerForm.Text, _
MessageBoxButtons.OK, _
MessageBoxIcon.Error)
End If
Return False
End If
End Using
Return True
Catch ex As Exception
'-----------------------------------------------------------------------------------
' 接続・参照不成功(一般例外)
strFatalErrMSG = strMSG & FP_ChangeRoundBrackets(strTableName) & _
ControlChars.CrLf & ex.Message
' メッセージ表示
If swDispError Then
MessageBox.Show(g_objOwnerForm, _
strFatalErrMSG, _
g_objOwnerForm.Text, _
MessageBoxButtons.OK, _
MessageBoxIcon.Error)
End If
Return False
End Try
End Using
End Function
'***********************************************************************************************
'* 処理名 :GetConnection
'* 機能 :SqlConnectionの取得
'-----------------------------------------------------------------------------------------------
'* 返り値 :SqlConnection(Object)
'* 引数 :Arg1 = 処理成否(Boolean) ※Ref参照
'* Arg2 = エラーメッセージ(String) ※Option(エラー表示させない時の通知用)
'* Arg3 = エラー表示スイッチ(Boolean) ※Option
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年01月22日
'* 作成者 :井上 治
'* 更新日 :2017年02月12日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Friend Function GetConnection(ByRef blnResult As Boolean, _
Optional ByRef strFatalErrMSG As String = "", _
Optional ByVal swDispError As Boolean = True) _
As SqlConnection
'-------------------------------------------------------------------------------------------
Try
blnResult = True
Return New SqlConnection(g_cnsSQLConnection)
Catch ex As Exception
strFatalErrMSG = ex.Message
' メッセージ表示
If swDispError Then
MessageBox.Show(g_objOwnerForm, _
strFatalErrMSG, _
g_objOwnerForm.Text, _
MessageBoxButtons.OK, _
MessageBoxIcon.Error)
End If
blnResult = False
Return Nothing
End Try
End Function
'***********************************************************************************************
'* 処理名 :ExecuteSQLError
'* 機能 :更新SQLエラー処理(致命エラー扱い)
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :Arg1 = エラーメッセージ(String)
'* Arg2 = 処理工程(String)
'* Arg3 = 更新テーブルID(String)
'* Arg5 = SQL文(String) ※Option
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年01月22日
'* 作成者 :井上 治
'* 更新日 :2017年01月22日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Friend Sub ExecuteSQLError(ByVal strErrMessage As String, _
ByVal strWork As String, _
ByVal strTableId As String, _
Optional ByVal strSQL As String = "")
'-------------------------------------------------------------------------------------------
Dim strMSG As String = String.Empty ' エラーメッセージ
' エラーメッセージの編集
If strWork.Length <> 0 Then
strMSG = strWork & FP_ChangeRoundBrackets(strTableId) & ControlChars.CrLf & _
strErrMessage
Else
strMSG = strErrMessage
If strTableId.Length <> 0 Then
strMSG &= FP_ChangeRoundBrackets(strTableId)
End If
End If
' SQL文があれば接続
If strSQL.Length <> 0 Then
strMSG &= ControlChars.CrLf & strSQL
End If
' エラーメッセージの表示
MessageBox.Show(g_objOwnerForm, _
strMSG, _
g_objOwnerForm.Text, _
MessageBoxButtons.OK, _
MessageBoxIcon.Error)
End Sub
'***********************************************************************************************
' ■■■ 共通サブ処理(Private) ■■■
'***********************************************************************************************
'* 処理名 :FP_ChangeRoundBrackets
'* 機能 :鍵カッコを丸カッコに変換(共通処理)
'-----------------------------------------------------------------------------------------------
'* 返り値 :変換後文字列(String)
'* 引数 :Arg1 = 変換前文字列(String)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2017年01月15日
'* 作成者 :井上 治
'* 更新日 :2017年01月22日
'* 更新者 :井上 治
'* 機能説明:例:"[TableName]"を"(TableName)"に変換する(例外メッセージ表示用)
'* 注意事項:先頭文字が"["でない場合はそのまま返す
'***********************************************************************************************
Private Function FP_ChangeRoundBrackets(ByVal strInTableName As String) As String
'-------------------------------------------------------------------------------------------
Const cnsKOKA2 As String = "].["
Const cnsDOT As String = "."
If strInTableName.Length = 0 Then Return strInTableName
' 先頭文字が"["か
If strInTableName.StartsWith(g_cnsKA2) Then
' 中間の"].["を"."のみに変換
Dim strText As String = strInTableName.Replace(cnsKOKA2, cnsDOT)
' 先頭文字が"["の場合は丸カッコに変換する
Return g_cnsKA & strText.Substring(1, strText.Length - 2) & g_cnsKO
ElseIf strInTableName.StartsWith(g_cnsKA) Then
' 先頭文字が"("の場合はそのまま返す
Return strInTableName
ElseIf strInTableName.EndsWith(g_cnsKO2) Then
' 右端のみ"]"が付いている場合の対応
Dim strText As String = strInTableName.Substring(0, strInTableName.Length - 1)
Return g_cnsKA & strText & g_cnsKO
Else
' 上記以外の場合は"("~")"で挟む
Return g_cnsKA & strInTableName & g_cnsKO
End If
End Function
'----------------------------------------<< End of Source >>------------------------------------
End Class
プロシージャ | 内容 |
---|---|
SqlCommandからDataTableを取得 (FP_GetDataTable) |
引数のデータ型を「SqlCommand」に変更しています。 引数のデフォルトのワークテーブル名を「g_cnsSqlTempTable1」に変更しています。 データアダプタのデータ型を「SqlDataAdapter」に変更しています。 |
SQL(INSERT)文共通部編集 (FP_SqlInsertCommon) |
第3引数「blnNoWait」をオプションで追加し、この指定によりSQL文の編集に「WITH(NOWAIT)」が加わるようにしています。 |
プロシージャ | 内容 |
---|---|
初期化 (New) |
MDBではここでMDBのファイル名等を受け取って接続文字列を編集・退避していましたが、 SQLServerでは接続文字列は定数としたため、引数は親フォームのみとなりました。 |
データテーブルを取得(SQLServer非接続処理) (GetDataTableSql) |
引数のデフォルトのワークテーブル名を「g_cnsSqlTempTable1」に変更しています。 データアダプタのデータ型を「SqlDataAdapter」に変更しています。 |
SqlConnectionの取得 (GetConnection) |
戻り値のデータ型を「SqlConnection」に変更して、使用する接続文字列もSQLServer用の定数に変更しています。 |
'***************************************************************************************************
' 配属一覧サンプル(SQLServer及びテーブル情報) modSampleCorp1SQL(Module)
'
' 作成者:井上治 URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
' 変更日付 Rev 変更履歴内容-------------------------------------------------------------------->
' 17/02/12(1.0.0.0)新規作成
'***************************************************************************************************
Module modSampleCorp1SQL
'===============================================================================================
Friend Const g_cnsDbnDbo As String = "[SampleCorp1].[dbo]."
' テーブルID
Friend Const g_cnsMST_BUSYO As String = "[MST_BUSYO]" ' 部署マスタ
Friend Const g_cnsMST_YAKU As String = "[MST_YAKU]" ' 役職マスタ
Friend Const g_cnsMST_SYAIN As String = "[MST_SYAIN]" ' 社員マスタ
Friend Const g_cnsMST_HAIZOKU As String = "[MST_HAIZOKU]" ' 配属マスタ
'-----------------------------------------------------------------------------------------------
' 各テーブルのフィールドIDテーブル
' 部署マスタ
Friend ReadOnly g_tblFld_MST_BUSYO() As String = {"[BUSYO_CD]", "[BUSYO_NM]"}
' タイプ(0=文字, 1=数値(整数), 2=数値(実数), 2=Bool, 5=日付, 6=時刻, 8=文字列(要変換), 9=他)
Friend ReadOnly g_tblFldTyp_MST_BUSYO() As Integer = {0, 8}
'-------------------------
' 役職マスタ
Friend ReadOnly g_tblFld_MST_YAKU() As String = {"[YAKU_CD]", "[RANK1]", "[RANK2]", "[YAKU_NM]"}
' タイプ(0=文字, 1=数値(整数), 2=数値(実数), 2=Bool, 5=日付, 6=時刻, 8=文字列(要変換), 9=他)
Friend ReadOnly g_tblFldTyp_MST_YAKU() As Integer = {0, 0, 0, 8}
'-------------------------
' 社員マスタ
Friend ReadOnly g_tblFld_MST_SYAIN() As String = _
{"[SCD]", "[KANJI_SEI]", "[KANJI_MEI]", "[KANA_SEI]", "[KANA_MEI]", "[SEX]", _
"[SEINEN_YMD]", "[NYUSYA_YMD]", "[TAISYOKU_YMD]"}
' タイプ(0=文字, 1=数値(整数), 2=数値(実数), 2=Bool, 5=日付, 6=時刻, 8=文字列(要変換), 9=他)
Friend ReadOnly g_tblFldTyp_MST_SYAIN() As Integer = {0, 8, 8, 8, 8, 0, 5, 5, 5}
'-------------------------
' 配属マスタ
Friend ReadOnly g_tblFld_MST_HAIZOKU() As String = _
{"[SCD]", "[KAISHI_YMD]", "[SYURYO_YMD]", "[BUSYO_CD]", "[YAKU_CD]"}
' タイプ(0=文字, 1=数値(整数), 2=数値(実数), 2=Bool, 5=日付, 6=時刻, 8=文字列(要変換), 9=他)
Friend ReadOnly g_tblFldTyp_MST_HAIZOKU() As Integer = {0, 5, 5, 0, 0}
'-------------------------
'----------------------------------------<< End of Source >>------------------------------------
End Module