勤務先にてMicrosoft365を使用しており、ちびメカ自作のOutlookメール生成Accessアプリが月1回限定でこっそり活躍中。
先日、もともと使用中の事業所マスタ(Accessフォーム)をコピーし、メール取引のない事業所用として別フォームを新たに設け、不要なレコードを削除。
ななんと片方のフォームからも当該レコードがきれいに消失していた!
肝を冷やした(゚д゚lll)
さいわいバックアップをとる習慣をつけているので、大事には至らなかったが、うかつだったと反省した。
見た目は別々のフォームでも、同じテーブルを参照する以上、根っこは同じ。
うっかり消してしまった場合もデータが保護されるよう、バックアップ用の作業テーブルを作っておくことを思いついた。
バックアップ用テーブル運用の準備作業(私用ファイルで検証)
① 元テーブルと同じ構成のバックアップ用テーブルを用意
②「元のテーブル(配信テーブル)」にて、ユーザーが指定した話数レコードを「保存用テーブル(配信テーブル_バックアップ)」に移籍
VBAによるINSERT → DELETE → Requery
Private Sub Cmd_削除_Click()
’エラーが発生したら、処理を中断して ErrHandlerラベル位置へジャンプ
On Error GoTo ErrHandler
Dim db As DAO.Database
Set db = CurrentDb
' 指定したテーブル/フィールドのレコードを抽出し、保存用のバックアップテーブルへコピー開始
db.Execute _
"INSERT INTO [配信テーブル_バックアップ] " & _
"SELECT * FROM [配信テーブル] " & _
"WHERE [話数] = " & Me.話数, dbFailOnError
' 元のテーブルから対象レコードを消去
db.Execute _
"DELETE FROM [配信テーブル] " & _
"WHERE [話数] = " & Me.話数, dbFailOnError
' データを更新し再表示
Me.Requery
Exit Sub
ErrHandler:
End Sub
職場ではAccess使用は推奨されておらず、もっぱら社内システムの補佐的ポジションといったところ。自己責任で運用するのは自由だが、勤務時間中にじっくり取り組むことは許されないし残業もできない。
なので自宅のAccessで、ダミーデータを用いて導入前の検証を行ってみることが多い。
職場のAccessはMicrosoft365サブスク版、自宅ではAccess2024を愛用中。見た目や使用感はほぼ同じだが、サブスク版は少し動きが不安定で、自宅で成功したはずのテストプレイ版が職場では思うように動かないことも多い。