Accessによる採番システム その7 フォームの作成③更新処理

採番

前回までに、採番した文書情報をデータベースのテーブルへ、フォームを介して登録する方法を紹介しました。今回作成しているシステムでは、ユーザーが直接テーブルの値を変更できないように設定をしていますので、フォーム上で一度登録した情報を更新することができないようになっています。

しかしながら、実際にはデータを更新・修正しなければならない、事例は多々あると思います。

そこで、登録しているデータをテキストボックス上へ呼び出し、修正した値を改めて更新する仕組みを設けます。

スポンサーリンク

フォームへコマンドボタンの追加

まずは、データを更新するためにデータ呼出ボタンとデータ更新ボタンを配置します。
先に作成している「cmd_登録」コマンドボタンをコピー&ペーストし、「cmd_呼出」と「cmd_更新」という名前に変更します。

作成したコマンドボタンの標題プロパティは、それぞれ「データ呼出」と「データ更新」にします。

最後に、それぞれのコマンドボタンにおける「クリック時」プロパティに「イベントプロシージャ」を設定します。

図1 データ呼出、更新ボタンの配置

VBAによるコードの実装

コマンドボタンを配置できましたので、クリックした際の処理についてコードを実装していきます。

VBAについては、以下の書籍が参考になりますので紹介しておきます。

スポンサーリンク

先に、データ呼出としてデータベース上に登録されているデータをフォーム上のテキストボックスに表示するコードを以下に示します。

Private Sub cmd_呼出_Click()
On Error GoTo Err呼出

'文書管理コードと年度が入力されていることの確認
If Me.t_文書管理コード = "" Or IsNull(Me.t_文書管理コード) Then
  MsgBox "文書管理コードが入力されていません。"
  Exit Sub
End If

If Me.t_年度 = "" Or IsNull(Me.t_年度) Then
  MsgBox "年度が入力されていません。"
  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 Then
  Me.t_連番 = rs!連番 Me.t_文書題目 = rs!文書題目 Me.t_作成者 = rs!作成者 Me.t_作成日 = rs!作成日
  MsgBox "データを呼び出しました。"
Else
  MsgBox "該当する文書はありませんでした。"
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_文書管理コード) Then
  MsgBox "文書管理コードが入力されていません。"
  Exit Sub
End If

If Me.t_年度 = "" Or IsNull(Me.t_年度) Then
  MsgBox "年度が入力されていません。"
  Exit Sub
End If

If Me.t_文書題目 = "" Or IsNull(Me.t_文書題目) Then
  MsgBox "文書題目が入力されていません。"
  Exit Sub
End If

If Me.t_作成者 = "" Or IsNull(Me.t_作成者) Then
  MsgBox "作成者が入力されていません。"
  Exit Sub
End If

If Me.t_作成日 = "" Or IsNull(Me.t_作成日) Then
  MsgBox "作成日が入力されていません。"
  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 採番システムの完成形及びレコード削除の方法

また、最後になりますが、レコードを削除する場合は、図2の赤枠で示す箇所で削除したいレコードを選択し、「Deleteキー」を押下することで処理が可能です。

まとめ

今回までで、Accessによる採番システムを作成することができました。作成したものは簡単なものですが、VBAも交えて様々な機能を実装しました。

これらを応用することでニーズに応じたデータベースを作成することができるかと思います。

また、細かい箇所についてはAccessの書籍が多数販売されていますので、そちらをご参考になさってください。著者が役に立った書籍を以下に紹介しておきます。(Accessのパッケージ版も併せてご紹介。)

スポンサーリンク

コメント

タイトルとURLをコピーしました