前回までに、採番した文書情報をデータベースのテーブルへ、フォームを介して登録する方法を紹介しました。今回作成しているシステムでは、ユーザーが直接テーブルの値を変更できないように設定をしていますので、フォーム上で一度登録した情報を更新することができないようになっています。
しかしながら、実際にはデータを更新・修正しなければならない、事例は多々あると思います。
そこで、登録しているデータをテキストボックス上へ呼び出し、修正した値を改めて更新する仕組みを設けます。
フォームへコマンドボタンの追加
まずは、データを更新するためにデータ呼出ボタンとデータ更新ボタンを配置します。
先に作成している「cmd_登録」コマンドボタンをコピー&ペーストし、「cmd_呼出」と「cmd_更新」という名前に変更します。
作成したコマンドボタンの標題プロパティは、それぞれ「データ呼出」と「データ更新」にします。
最後に、それぞれのコマンドボタンにおける「クリック時」プロパティに「イベントプロシージャ」を設定します。
VBAによるコードの実装
コマンドボタンを配置できましたので、クリックした際の処理についてコードを実装していきます。
スポンサーリンク
先に、データ呼出としてデータベース上に登録されているデータをフォーム上のテキストボックスに表示するコードを以下に示します。
Private Sub cmd_呼出_Click() On Error GoTo Err呼出 '文書管理コードと年度が入力されていることの確認 If Me.t_文書管理コード = "" Or IsNull(Me.t_文書管理コード) ThenMsgBox "文書管理コードが入力されていません。"
Exit Sub
End If If Me.t_年度 = "" Or IsNull(Me.t_年度) ThenMsgBox "年度が入力されていません。"
Exit Sub
End If 'ADOを用いるための変数と連番を格納するための変数宣言 Dim listNum As String Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset '連番を入力してもらう、数字以外は受け付けないようにする。 Do listNum = InputBox("呼び出したい文書管理番号の「連番」を入力してください。") Loop Until IsNumeric(listNum) 'データベースへの接続 Set cn = CurrentProject.Connection 'T_管理テーブルを開く rs.Open "T_管理", cn, adOpenKeyset, adLockOptimistic '条件に一致するレコードを取得する。連番は整数型にキャストする。 rs.Filter = "文書管理コード = '" & Forms!F_Main.t_文書管理コード & "' AND 年度 = " & Forms!F_Main.t_年度 & " AND 連番 = " & CInt(listNum) '条件にあうレコードがあった場合に、テキストボックスへ反映する。 If rs.RecordCount <> 0 ThenMe.t_連番 = rs!連番 Me.t_文書題目 = rs!文書題目 Me.t_作成者 = rs!作成者 Me.t_作成日 = rs!作成日
MsgBox "データを呼び出しました。"
ElseMsgBox "該当する文書はありませんでした。"
End If 'T_管理テーブルを閉じる rs.Close: Set rs = Nothing 'データベース接続を切る cn.Close: Set cn = Nothing Exit_呼出: Exit Sub Err_呼出: MsgBox Err.Description Resume Exit_呼出 End Sub
続いて、データ更新としてテキストボックス上で修正した値を再度データベースに登録するためのコードを以下に示します。
Private Sub cmd_更新_Click() On Error GoTo Err更新 'テキストボックスの入力チェック If Me.t_文書管理コード = "" Or IsNull(Me.t_文書管理コード) ThenMsgBox "文書管理コードが入力されていません。"
Exit Sub
End If If Me.t_年度 = "" Or IsNull(Me.t_年度) ThenMsgBox "年度が入力されていません。"
Exit Sub
End If If Me.t_文書題目 = "" Or IsNull(Me.t_文書題目) ThenMsgBox "文書題目が入力されていません。"
Exit Sub
End If If Me.t_作成者 = "" Or IsNull(Me.t_作成者) ThenMsgBox "作成者が入力されていません。"
Exit Sub
End If If Me.t_作成日 = "" Or IsNull(Me.t_作成日) ThenMsgBox "作成日が入力されていません。"
Exit Sub
End If 'ADO処理のための変数宣言 Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset 'データベースの接続 Set cn = CurrentProject.Connection 'T_管理テーブルを開く rs.Open "T_管理", cn, adOpenKeyset, adLockOptimistic '同一番号のレコードを呼び出す rs.Filter = "文書管理コード = '" & Forms!F_Main.t_文書管理コード & "' AND 年度 = " & Forms!F_Main.t_年度 & " AND 連番 = " & Forms!F_Main.t_連番 'レコードの更新 rs!文書題目 = Me.t_文書題目 rs!作成者 = Me.t_作成者 rs!作成日 = Me.t_作成日 rs.Update 'T_管理テーブルを閉じる rs.Close: Set rs = Nothing 'データベースの接続を切る cn.Close: Set cn = Nothing 'フォームをいったんリクエリーする。 Me.Requery '続けて採番することを考えてテキストボックスの値をリセット 'テキストボックスの値を削除する Me.t_文書題目 = "" Me.t_作成者 = "" Me.t_作成日 = "" '採番プロシージャを呼び出して、連番の値を1つ繰り上げる Call 採番 MsgBox "採番システムの情報を更新しました。" Exit_更新: Exit Sub Err_更新: MsgBox Err.Description Resume Exit_更新 End Sub
また、最後になりますが、レコードを削除する場合は、図2の赤枠で示す箇所で削除したいレコードを選択し、「Deleteキー」を押下することで処理が可能です。
まとめ
今回までで、Accessによる採番システムを作成することができました。作成したものは簡単なものですが、VBAも交えて様々な機能を実装しました。
これらを応用することでニーズに応じたデータベースを作成することができるかと思います。
また、細かい箇所についてはAccessの書籍が多数販売されていますので、そちらをご参考になさってください。
スポンサーリンク
コメント