Access 2000 修正更新


  初期処理




フォームのレコードソースには、テーブルを選択しています
移動ボタンは非表示です

フォーム用の更新用フラグとして

Dim bUpdate

を定義しています。

この変数は、更新ボタンをクリックして更新が確定した時にセットされます。そして、そのフラグは Form_BeforeUpdate でチェックされ、更新ボタン以外から発生する更新イベントをシャットアウトします

  

Private Sub Form_Load()

' 更新可能フラグ OFF
    bUpdate = False
    
' フィルタ適用 OFF
    Me.FilterOn = False
    
' 明細表示 OFF
    Me.Section(0).Visible = False
    
' 更新・キャンセルボタン disable
    Me.更新.Enabled = False
    Me.キャンセル.Enabled = False
    
' 表示エリアクリア
    Me.資格名.Value = ""
    
' 削除不能
    Form.AllowDeletions = False

End Sub
  

  フォーム更新イベントのコントロール

  

Private Sub Form_BeforeUpdate(Cancel As Integer)

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

  更新ボタンの処理

最初に更新可能な状態であるかどうかチェックを行ないます。IsRec は、対象レコード数が 1 の時に True となります。更新可能であれば、更新確認をダイアログで確認させ、OK であれば bUpdate を True にして更新を行います

  

Private Sub 更新_Click()
    
    If IsNull(Me.資格コード.Value) Then
        MsgBox ("資格を選択して下さい")
        Exit Sub
    End If
    If IsNull(Me.学籍番号.Value) Then
        MsgBox ("学生を選択して下さい")
        Exit Sub
    End If
    
    If Not IsRec(Me) Then
        MsgBox ("対象レコードが存在しない為、更新できません")
        Exit Sub
    End If
    
    If MsgBox("更新しますか?", vbOKCancel) = vbOK Then
        bUpdate = True
        On Error Resume Next
        DoCmd.RunCommand acCmdSaveRecord
        If Err.Number <> 0 Then
            MsgBox (Err.Description)
        End If
        On Error GoTo 0
    End If
   
  

  

' *********************************************************
' 対象レコードの存在
' *********************************************************
Public Function IsRec(obj) As Boolean

    If obj.Recordset.RecordCount = 1 Then
        IsRec = True
    Else
        IsRec = False
    End If

End Function
  

  キャンセル

連結フィールドに対する変更が加えられている場合にのみ、Form を Undo します。これによって、カレントレコードの状態が編集前に戻されます

  

Private Sub キャンセル_Click()

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

  終了

  

Private Sub 終了_Click()

    DoCmd.Close , , acSaveNo

End Sub
  

  データコントロール

このテーブルのキーは、二つあり、コンボボックスでデータが選択できるようになっています。初期画面ではどちらもデータが無い状態であり、両方選択されている場合のみフィルタを有効にします。

対象レコードが無い場合は、セクション(明細)は表示されません。また、更新ボタンもキャンセルボタンも使用できません

ここで重要なのが、Me.Undo という処理です。キーが変更されるとカレントレコードの状態は全て編集前の状態に戻り、Filter が正しく動作します。但し、非表示の場合前のデータが残るので、表示後は Reflesh する必要があります

  

Private Sub 学籍番号_AfterUpdate()

    If Not IsNull(Me.資格コード.Value) And _
        Not IsNull(Me.学籍番号.Value) Then
        Me.Undo
        Me.FilterOn = False
        Me.Filter = "学籍番号 = " & Me.学籍番号.Value
        Me.Filter = Me.Filter & " and 資格コード = " & Dd(Me.資格コード.Value)
        Me.FilterOn = True
        
        Me.Section(0).Visible = IsRec(Me)
    Else
        Me.Section(0).Visible = False
    End If
    
    Me.更新.Enabled = Me.Section(0).Visible
    Me.キャンセル.Enabled = Me.Section(0).Visible

    Me.Refresh

End Sub

Private Sub 資格コード_AfterUpdate()
    
    Me.資格名.Value = Me.資格コード.Column(2)
    
    If Not IsNull(Me.資格コード.Value) And _
        Not IsNull(Me.学籍番号.Value) Then
        Me.Undo
        Me.FilterOn = False
        Me.Filter = "学籍番号 = " & Me.学籍番号.Value
        Me.Filter = Me.Filter & " and 資格コード = " & Dd(Me.資格コード.Value)
        Me.FilterOn = True
        
        Me.Section(0).Visible = IsRec(Me)
    Else
        Me.Section(0).Visible = False
    End If

    Me.更新.Enabled = Me.Section(0).Visible
    Me.キャンセル.Enabled = Me.Section(0).Visible

    Me.Refresh

End Sub
  

  

' *********************************************************
' " 挟み込み
' *********************************************************
Public Function Dd(strValue)

    Dd = """" & strValue & """"

End Function
  




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


[smalltech]
claudebot
24/03/29 09:42:41
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