雛形2号


  対象テーブルと主キーの情報による標準化 (変更対象部分) --> キーがひとつの場合




  

Dim bUpdate
Dim ActType
Dim strTarget
Dim strPkey1, nPkeyType, nPkeySize
  

  

' *********************************************************
' コード編集 ( サンプル )
' *********************************************************
Private Sub cmbコード_LostFocus()

    ' cmbコード が 前ゼロ編集の場合は、以下の False を True に変更します
    If False Then
        If Not IsNull(Me.cmbコード.Value) Then
            Me.cmbコード.Value = _
                Right("000000000000" & Me.cmbコード.Value, nPkeySize)
        End If
    End If

End Sub

' *********************************************************
' コードの桁数チェック ( サンプル )
' *********************************************************
Private Sub cmbコード_BeforeUpdate(Cancel As Integer)

    Dim nCurDataLength

    ' 文字列の時は、DB の定義から長さを取得してチェック
    If nPkeyType = 10 Then
        nCurDataLength = LenB(StrConv(Me.cmbコード.Value, vbFromUnicode))
        
        If nCurDataLength > nPkeySize Then
            MsgBox ("入力されたデータのサイズが大きすぎます ( " _
                & nTargetFieldSize & "桁以内 )")
            Cancel = True
            Exit Sub
        End If
    Else
        ' 文字列以外の場合は、仕様に基づいてチェックします
    End If

End Sub

' *********************************************************
' 初期処理
' *********************************************************
Private Sub Form_Load()

    ' -----------------------------------------------------
    ' 対象テーブルと主キーの情報
    '  ★ 設定して下さい
    ' -----------------------------------------------------
    strTarget = "コード区分マスタ"
    strPkey1 = "区分"
    
    ' -----------------------------------------------------
    ' タイプとサイズの自動取得
    ' -----------------------------------------------------
    nPkeyType = _
        Application.CurrentDb.TableDefs(strTarget).Fields(strPkey1).Type
    nPkeySize = _
        Application.CurrentDb.TableDefs(strTarget).Fields(strPkey1).Size

    DoCmd.SetWarnings (False)

    ' -----------------------------------------------------
    ' プログラム固有設定
    '  ★ 処理モード限定時のみ ActType を変更します
    ' -----------------------------------------------------
    Me.タイトルラベル.Caption = strTarget & "メンテ"
    ActType = "全て"
'    ActType = "修正のみ"
'    ActType = "新規のみ"
'    ActType = "削除のみ"

    ' -----------------------------------------------------
    ' 表示専用フィールドの設定
    ' -----------------------------------------------------
    Call SetDispField(Me.txt名称)
    Call SetDispField(Me.txt名称2)
    
    ' -----------------------------------------------------
    ' 標準フォームプロパティ設定
    ' -----------------------------------------------------
    Call SetStdForm(Me)

    ' -----------------------------------------------------
    ' 更新可能フラグ OFF
    ' -----------------------------------------------------
    bUpdate = False
    
    ' -----------------------------------------------------
    ' フィルタ初期適用(レコード選択無し)
    ' -----------------------------------------------------
    Me.FilterOn = False
    Me.Filter = strPkey1 & " is NULL"
    Me.FilterOn = True
    
    ' -----------------------------------------------------
    ' 明細表示 OFF
    ' -----------------------------------------------------
    Me.Section(0).Visible = False
    
    ' -----------------------------------------------------
    ' ボタン初期状態
    ' -----------------------------------------------------
    If ActType = "修正のみ" Then
        Me.btn新規レコード.Visible = False
        Me.btn削除.Visible = False
    End If
    If ActType = "新規のみ" Then
        Me.btn削除.Visible = False
    End If
    If ActType = "削除のみ" Then
        Me.btn新規レコード.Visible = False
    End If
    
    Me.btn更新.Enabled = False
    Me.btnキャンセル.Enabled = False
    Me.btn終了.Enabled = True
    Me.btn新規レコード.Enabled = False
    Me.btn削除.Enabled = False
    
    ' -----------------------------------------------------
    ' 表示エリアクリア
    ' -----------------------------------------------------
    Me.txt名称.Value = ""
    Me.txt名称2.Value = ""
    
    ' -----------------------------------------------------
    ' 表示エリア非表示設定
    '  ★ 使用する雛形コントロールの初期表示状態を設定
    ' -----------------------------------------------------
    Me.cmb処理モード.Visible = True         ' 処理区分
    Me.txt名称.Visible = False              ' コード名称用
    Me.lbl参照タイトル.Visible = False      ' 参照用タイトルラベル
    Me.cmb参照用.Visible = False            ' 参照用コンボ
    Me.txt名称2.Visible = False             ' 参照用名称表示

    Me.cmbコード.SetFocus

End Sub

' *********************************************************
' キー項目処理
' *********************************************************
Private Sub cmbコード_AfterUpdate()

    ' -----------------------------------------------------
    ' 表示書き換えのちらつき防止
    ' -----------------------------------------------------
    Me.Section(0).Visible = False
    
    ' -----------------------------------------------------
    ' キー変更は修正モードへ強制リセット
    ' -----------------------------------------------------
    Me.cmb処理モード.Value = 2
    
    ' -----------------------------------------------------
    ' 表示エリア設定
    '  ★ コードの名称を表示する場合
    ' -----------------------------------------------------
    On Error Resume Next
    Me.txt名称.Value = Me.cmbコード.Column(1)
    On Error GoTo 0
    Me.cmb参照用.Value = ""

    ' -----------------------------------------------------
    ' 新規レコードボタン初期設定
    ' -----------------------------------------------------
    Me.btn新規レコード.Enabled = False
    
    If Not IsNull(Me.cmbコード.Value) Then
        ' -------------------------------------------------
        ' キーが入力されている場合
        '  ★ 入力されたキー値の設定ですが、通常は変更
        '  ★ の必要はありません
        ' -------------------------------------------------
        Me.Undo
        Me.FilterOn = False
        If nPkeyType <> 4 Then
            Me.Filter = strPkey1 & " = " & Ss(Me.cmbコード.Value)
        Else
            Me.Filter = strPkey1 & " = " & Me.cmbコード.Value
        End If
        Me.FilterOn = True
        
        Me.Section(0).Visible = IsRec(Me)
        Me.AllowAdditions = False
        If Not IsRec(Me) Then
            Me.AllowAdditions = True
            Me.btn新規レコード.Enabled = True
        End If
    Else
        ' -------------------------------------------------
        ' キーは未入力
        ' -------------------------------------------------
        Me.Section(0).Visible = False
    End If
    
    ' -----------------------------------------------------
    ' ボタン状態の同期
    ' -----------------------------------------------------
    Me.btn終了.SetFocus        ' 必ず使用可能なコントロール
    Me.btn更新.Enabled = Me.Section(0).Visible
    Me.btn削除.Enabled = Me.Section(0).Visible
    Me.btnキャンセル.Enabled = Me.Section(0).Visible

    ' -----------------------------------------------------
    ' 再表示
    ' -----------------------------------------------------
    Me.Refresh
    
    ' -----------------------------------------------------
    ' 更新ボタンへのフォーカス
    ' -----------------------------------------------------
    If Me.btn更新.Enabled Then
        Me.btn更新.SetFocus
    End If

End Sub

' *********************************************************
' 修正・新規更新
' *********************************************************
Private Sub btn更新_Click()
    
    Dim strKey1, strKey2
    
    If MsgBox("更新しますか?", _
        vbOKCancel Or vbDefaultButton2 Or vbQuestion) = vbOK Then
        
        ' -------------------------------------------------
        ' 新規用事前処理
        '  ★ 新規の場合、キー項目に直接セット
        '  ★ 新規の時のみ設定する項目のセット
        ' -------------------------------------------------
        If cmb処理モード = 1 Then
            Me.区分.Value = Me.cmbコード.Value
        End If
        
        ' -------------------------------------------------
        ' 作成日と更新日がある場合にシステム日付をセット
        ' -------------------------------------------------
        On Error Resume Next
        If cmb処理モード = 1 Then
            Me.作成日.Value = Date
            Me.更新日.Value = Date
        End If
        If cmb処理モード = 2 Then
            Me.更新日.Value = Date
        End If
        On Error GoTo 0
    
        ' -------------------------------------------------
        ' 更新用編集
        '  ★ 特殊な編集が必要な場合に記述します
        ' -------------------------------------------------
        
        
        ' -------------------------------------------------
        ' 更新実行
        ' -------------------------------------------------
        bUpdate = True
        On Error Resume Next
        DoCmd.RunCommand acCmdSaveRecord
        If Err.Number <> 0 Then
            MsgBox (Err.Description)
        End If
        On Error GoTo 0

        ' -----------------------------------------------------
        ' 現在のキーでリセット
        ' -----------------------------------------------------
        cmbコード_AfterUpdate
    
    End If

End Sub

' *********************************************************
' フォーカス
' *********************************************************
Private Sub cmb参照用_Enter()

    Me.cmb参照用.Dropdown

End Sub

' *********************************************************
' 参照用処理
' *********************************************************
Private Sub cmb参照用_AfterUpdate()
    
    ' -----------------------------------------------------
    ' 表示エリア設定
    ' -----------------------------------------------------
    Me.cmbコード.Value = Me.cmb参照用.Column(2)

    ' -----------------------------------------------------
    ' 再表示
    ' -----------------------------------------------------
    cmbコード_AfterUpdate

End Sub
  







  非変更対象部分




  

' *********************************************************
' キャンセル処理 ( 変更不可 )
' *********************************************************
Private Sub btnキャンセル_Click()

    If Me.Dirty Then
        If MsgBox("編集をキャンセルしますか?", _
            vbYesNo Or vbDefaultButton2) = vbYes Then
            Me.Undo
            Me.Refresh
        End If
    Else
        MsgBox ("編集されていません")
    End If
    
End Sub

' *********************************************************
' 終了 ( 変更不可 )
' *********************************************************
Private Sub btn終了_Click()

    DoCmd.Close , , acSaveNo

End Sub

' *********************************************************
' 新規モード移行 ( 変更不可 )
' *********************************************************
Private Sub btn新規レコード_Click()

    ' -----------------------------------------------------
    ' 処理モード変更
    ' -----------------------------------------------------
    Me.cmb処理モード.Value = 1

    ' -----------------------------------------------------
    ' ボタン状態のセット
    ' -----------------------------------------------------
    Me.Section(0).Visible = True
    Me.btn更新.Enabled = True
    Me.btnキャンセル.Enabled = True
    Me.btnキャンセル.SetFocus
    
    ' -----------------------------------------------------
    ' 新規レコード挿入は一度のみ
    ' -----------------------------------------------------
    Me.btn新規レコード.Enabled = False
    
    ' -----------------------------------------------------
    ' 新規レコード挿入
    ' -----------------------------------------------------
    On Error Resume Next
    DoCmd.RunCommand acCmdRecordsGoToNew
    On Error GoTo 0
        
    ' -----------------------------------------------------
    ' セクション内の内容をクリア
    ' -----------------------------------------------------
    For Each Target In Me.Section(0).Controls
        On Error Resume Next
        Target.Value = Empty
        On Error GoTo 0
    Next

    ' -----------------------------------------------------
    ' 初期値設定
    '  ★ 新規レコードのデフォルト値を設定できますが
    '  ★ 修正・新規更新で設定して下さい
    ' -----------------------------------------------------

    
End Sub

' *********************************************************
' 削除更新 ( 変更不可 )
' *********************************************************
Private Sub btn削除_Click()

    ' -----------------------------------------------------
    ' 一時的に削除可能にする
    ' -----------------------------------------------------
    Me.AllowDeletions = True
    
    ' -----------------------------------------------------
    ' 削除実行
    ' -----------------------------------------------------
    If MsgBox("削除しますか?", _
        vbOKCancel Or vbDefaultButton2 Or vbExclamation) = vbOK Then
        bUpdate = True
        On Error Resume Next
        DoCmd.RunCommand acCmdDeleteRecord
        If Err.Number <> 0 Then
            MsgBox (Err.Description)
        End If
        On Error GoTo 0
    End If
    
    ' -----------------------------------------------------
    ' 削除不能に戻す
    ' -----------------------------------------------------
    Me.AllowDeletions = False
    
    ' -----------------------------------------------------
    ' 現在のキーでリセット
    ' -----------------------------------------------------
    cmbコード_AfterUpdate

End Sub

' *********************************************************
' 更新コントロール ( 変更不可 )
' *********************************************************
Private Sub Form_BeforeUpdate(Cancel As Integer)

    ' 更新ボタンをクリックして更新確認した時のみ更新可能
    If Not bUpdate Then
        Cancel = True
    End If
     
    bUpdate = False
    
End Sub

  

  対象テーブルと主キーの情報による標準化 (変更対象部分) --> キーが複数の場合

  

Dim bUpdate
Dim ActType
Dim strTarget
Dim strPkey1, strPkey2, nPkeyType
  

  

' *********************************************************
' 初期処理
' *********************************************************
Private Sub Form_Load()

    ' -----------------------------------------------------
    ' 対象テーブルと主キーの情報
    '  ★ 設定して下さい
    ' -----------------------------------------------------
    strTarget = "コード名称マスタ"
    strPkey1 = "区分"
    strPkey2 = "コード"

    ' -----------------------------------------------------
    ' タイプとサイズの自動取得は、キー列が複数なのでしません
    ' -----------------------------------------------------
   
    DoCmd.SetWarnings (False)

    ' -----------------------------------------------------
    ' プログラム固有設定 @@ 要変更
    '  ★ 処理モード限定時のみ ActType を変更します
    ' -----------------------------------------------------
    Me.タイトルラベル.Caption = strTarget & "メンテ"
    ActType = "全て"
'    ActType = "修正のみ"
'    ActType = "新規のみ"
'    ActType = "削除のみ"

    ' -----------------------------------------------------
    ' 表示専用フィールドの設定
    ' -----------------------------------------------------
    Call SetDispField(Me.txt名称)
    Call SetDispField(Me.txt名称2)
    
    ' -----------------------------------------------------
    ' 標準フォームプロパティ設定
    ' -----------------------------------------------------
    Call SetStdForm(Me)

    ' -----------------------------------------------------
    ' 更新可能フラグ OFF
    ' -----------------------------------------------------
    bUpdate = False
    
    ' -----------------------------------------------------
    ' フィルタ初期適用(レコード選択無し)
    ' -----------------------------------------------------
    Me.FilterOn = False
    Me.Filter = strPkey1 & " is NULL"
    Me.FilterOn = True
    
    ' -----------------------------------------------------
    ' 明細表示 OFF
    ' -----------------------------------------------------
    Me.Section(0).Visible = False
    
    ' -----------------------------------------------------
    ' ボタン初期状態
    ' -----------------------------------------------------
    If ActType = "修正のみ" Then
        Me.btn新規レコード.Visible = False
        Me.btn削除.Visible = False
    End If
    If ActType = "新規のみ" Then
        Me.btn削除.Visible = False
    End If
    If ActType = "削除のみ" Then
        Me.btn新規レコード.Visible = False
    End If
    
    Me.btn更新.Enabled = False
    Me.btnキャンセル.Enabled = False
    Me.btn終了.Enabled = True
    Me.btn新規レコード.Enabled = False
    Me.btn削除.Enabled = False
    
    ' -----------------------------------------------------
    ' 表示エリアクリア
    ' -----------------------------------------------------
    Me.txt名称.Value = ""
    Me.txt名称2.Value = ""
    
    ' -----------------------------------------------------
    ' 表示エリア非表示設定
    '  ★ 使用する雛形コントロールの初期表示状態を設定
    ' -----------------------------------------------------
    Me.cmb処理モード.Visible = True         ' 処理区分
    Me.txt名称.Visible = False              ' コード名称用
    Me.lbl参照タイトル.Visible = False      ' 参照用タイトルラベル
    Me.cmb参照用.Visible = False            ' 参照用コンボ
    Me.txt名称2.Visible = False             ' 参照用名称表示

    Me.cmbコード.SetFocus

End Sub


' *********************************************************
' キー項目処理
' *********************************************************
Private Sub cmb区分_AfterUpdate()

    Me.cmbコード.Value = Empty
    Me.cmbコード.Requery
    cmbコード_AfterUpdate
    
End Sub

' *********************************************************
' キー項目処理
' *********************************************************
Private Sub cmbコード_AfterUpdate()

    ' -----------------------------------------------------
    ' 表示書き換えのちらつき防止
    ' -----------------------------------------------------
    Me.Section(0).Visible = False
    
    ' -----------------------------------------------------
    ' キー変更は修正モードへ強制リセット
    ' -----------------------------------------------------
    Me.cmb処理モード.Value = 2
    
    ' -----------------------------------------------------
    ' 表示エリア設定
    '  ★ コードの名称を表示する場合
    ' -----------------------------------------------------
    On Error Resume Next
    Me.txt名称.Value = Me.cmbコード.Column(1)
    On Error GoTo 0
    Me.cmb参照用.Value = ""

    ' -----------------------------------------------------
    ' 新規レコードボタン初期設定
    ' -----------------------------------------------------
    Me.btn新規レコード.Enabled = False
    
    If Not IsNull(Me.cmbコード.Value) Then
        ' -------------------------------------------------
        ' キーが入力されている場合
        '  ★ 入力されたキー値の設定をSQLで正しく記述
        ' -------------------------------------------------
        Me.Undo
        Me.FilterOn = False
        Me.Filter = strPkey1 & " = " & Me.cmb区分.Value & _
            " and " & strPkey2 & " = " & Ss(Me.cmbコード.Value)
        Me.FilterOn = True
        
        Me.Section(0).Visible = IsRec(Me)
        Me.AllowAdditions = False
        If Not IsRec(Me) Then
            Me.AllowAdditions = True
            Me.btn新規レコード.Enabled = True
        End If
    Else
        ' -------------------------------------------------
        ' キーは未入力
        ' -------------------------------------------------
        Me.Section(0).Visible = False
    End If
    
    ' -----------------------------------------------------
    ' ボタン状態の同期
    ' -----------------------------------------------------
    Me.btn終了.SetFocus        ' 必ず使用可能なコントロール
    Me.btn更新.Enabled = Me.Section(0).Visible
    Me.btn削除.Enabled = Me.Section(0).Visible
    Me.btnキャンセル.Enabled = Me.Section(0).Visible

    ' -----------------------------------------------------
    ' 再表示
    ' -----------------------------------------------------
    Me.Refresh
    
    ' -----------------------------------------------------
    ' 更新ボタンへのフォーカス
    ' -----------------------------------------------------
    If Me.btn更新.Enabled Then
        Me.btn更新.SetFocus
    End If

End Sub

' *********************************************************
' 修正・新規更新
' *********************************************************
Private Sub btn更新_Click()
    
    Dim strKey1, strKey2
    
    If MsgBox("更新しますか?", vbOKCancel Or vbDefaultButton2 Or vbQuestion) = vbOK Then
        
        ' -------------------------------------------------
        ' 新規用事前処理
        '  ★ 新規の場合、キー項目に直接セット
        '  ★ 新規の時のみ設定する項目のセット
        ' -------------------------------------------------
        If cmb処理モード = 1 Then
            Me.区分.Value = Me.cmb区分.Value
            Me.コード.Value = Me.cmbコード.Value
        End If
    
          ' -------------------------------------------------
        ' 作成日と更新日がある場合にシステム日付をセット
        ' -------------------------------------------------
        On Error Resume Next
        If cmb処理モード = 1 Then
            Me.作成日.Value = Date
            Me.更新日.Value = Date
        End If
        If cmb処理モード = 2 Then
            Me.更新日.Value = Date
        End If
        On Error GoTo 0
        
        ' -------------------------------------------------
        ' 更新用編集
        '  ★ 特殊な編集が必要な場合に記述します
        ' -------------------------------------------------
        
        
        ' -------------------------------------------------
        ' 更新実行
        ' -------------------------------------------------
        bUpdate = True
        On Error Resume Next
        DoCmd.RunCommand acCmdSaveRecord
        If Err.Number <> 0 Then
            MsgBox (Err.Description)
        End If
        On Error GoTo 0

        ' -----------------------------------------------------
        ' 現在のキーでリセット
        ' -----------------------------------------------------
        cmbコード_AfterUpdate
    
    End If

End Sub
  




yahoo  google  MSDN  MSDN(us)  WinFAQ  Win Howto  tohoho  ie_DHTML  vector  wdic  辞書  天気 


[access]
claudebot
24/04/18 19:32:53
InfoBoard Version 1.00 : Language=Perl

1 BatchHelper COMprog CommonSpec Cprog CprogBase CprogSAMPLE CprogSTD CprogSTD2 CprogWinsock Cygwin GameScript HTML HTMLcss InstallShield InstallShieldFunc JScript JScriptSAMPLE Jsfuncs LLINK OldProg OracleGold OracleSilver PRO PRObrowser PROc PROconePOINT PROcontrol PROftpclient PROjscript PROmailer PROperl PROperlCHAT PROphp PROphpLesson PROphpLesson2 PROphpLesson3 PROphpfunction PROphpfunctionArray PROphpfunctionMisc PROphpfunctionString PROsql PROvb PROvbFunction PROvbString PROvbdbmtn PROvbonepoint PROwebapp PROwin1POINT PROwinSYSTEM PROwinYOROZU PROwindows ProjectBoard RealPHP ScriptAPP ScriptMaster VBRealtime Vsfuncs a1root access accreq adsi ajax amazon argus asp aspSample aspVarious aspdotnet aw2kinst cappvariety centura ckeyword classStyle cmaterial cmbin cmdbapp cmenum cmlang cmlistbox cmstd cmstdseed cmtxt cs daz3d db dbCommon dbaccess dnettool dos download flex2 flex3 flex4 framemtn framereq freeWorld freesoft gimp ginpro giodownload google hdml home hta htmlDom ie9svg install java javaSwing javascript jetsql jquery jsp jspTest jspVarious lightbox listasp listmsapi listmsie listmsiis listmsnt listmspatch listmsscript listmsvb listmsvc memo ms msde mysql netbeans oraPlsql oracle oracleWiper oraclehelper orafunc other panoramio pear perl personal pgdojo pgdojo_cal pgdojo_holiday pgdojo_idx pgdojo_ref pgdojo_req php phpVarious phpguide plsql postgres ps r205 realC realwebapp regex rgaki ruby rule sboard sc scprint scquest sdb sdbquest seesaa setup sh_Imagick sh_canvas sh_dotnet sh_google sh_tool sh_web shadowbox shgm shjquery shvbs shweb sjscript skadai skywalker smalltech sperl sqlq src systemdoc tcpip tegaki three toolbox twitter typeface usb useXML vb vbdb vbsfunc vbsguide vbsrc vpc wcsignup webanymind webappgen webclass webparts webtool webwsh win8 winofsql wmi work wp youtube