• 締切済み

Accessでレコードの削除履歴を残したい。

Accessで添付画像のような入力フォームを作成しています。 右端にレコード削除ボタンを作成していますが、レコードを削除した履歴を残すには どのようにしたらいいでしょうか? 自分なりに調べてはいますが、わかりませんので、宜しくお願い致します。

みんなの回答

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

もう一つ。 レコードの削除自体はツールバーにある レコードの削除ボタンをクリックしてしまうと 削除されてしまいますが、この場合は ログが取れません。なるべくならツールバーの 「起動時の設定」など「組み込みツールバー」の チェックをはずして「レコードの削除」ボタン をかくしておくようにするとか、あるいはコードで カスタムのツールバーを設定するとかいろいろ ありますが、複雑になるので割愛しておきます。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

たびたびすみません。 ENTERキーでレコード内を移動するとき、 ボタンにフォーカスが当たるとメッセージ ボックスが表示されるので、ボタンの プロパティで「タブストップ」を「いいえ」 に設定しておいてください。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

回答の(2)のコードの中で、 Set rs = db.OpenRecordset("T顧客削除ログ", dbOpenDynaset) となっていますが、 Set rs = db.OpenRecordset("T削除ログ", dbOpenDynaset) としてください。テーブル名が違っていました。 あるいは、何の削除ログか分かりやすくするのならば、    「Tテーブル名削除ログ」 としてほうがいいかもしれません。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

画像の中のコントロールの種類がわかりにくいのですが、 一応、チェックボックスなどもあるのだろう、という 前提で。 フォームは表形式で、レコードを表示しているのは サブフォームではないものとします。 (1) ログを取るためのテーブルを用意します。名前を「T削除ログ」 とします。このテーブルは削除した内容も保持するために、 まず、フォームに表示しているレコードの内容と同じものを 用意します。もし、フォームに表示しているデータがテーブルを もとにしているならばそのテーブルと同じ構造のものを用意します。 単純にはそのテーブルを「T削除ログ」という名前をつけて保存し、 データを削除します。その後、一旦ファイルを最適化します。 次に、このテーブルにフィールドを追加します。たとえば元の テーブルのフィールドが、    顧客ID      数値型    顧客名      テキスト型    電話番号     テキスト型    年齢       数値型    メール      Yes/No型 のようになっていて、フォームにすべて表示されているものとすると、    ログID      オートナンバー    タイムスタンプ  日付/時刻型 (日付 (標準))    顧客ID      数値型    顧客名      テキスト型    電話番号     テキスト型    年齢       数値型    メール      Yes/No型 のように、ログIDとタイムスタンプという二つの フィールドを追加します。なお、タイムスタンプ の書式は「日付 (標準)」を選択しておいてください。 (2) 次に質問中のレコード削除ボタンのクリック時のイベントで、 以下のように設定します。 なお、DAOを使っているので参照設定でDAOにチェックが入っているか 確認してください。 Private Sub 削除ボタン_Click()   Dim db As DAO.Database   Dim rs As DAO.Recordset   Set db = CurrentDb   Set rs = db.OpenRecordset("T顧客削除ログ", dbOpenDynaset)   '処理行が新規レコードではない場合にのみ削除を実行   If Me.Form.NewRecord = False Then     If MsgBox("選択したレコードを削除します。よろしいですか?", vbYesNo + 64 + vbDefaultButton2, "行削除") = vbYes Then       'カレントレコードの内容をT顧客削除ログに追加       rs.AddNew         rs!タイムスタンプ = Now()         rs!名前 = Me.詳細.Controls("名前")         rs!電話番号 = Me.詳細.Controls("電話番号")         rs!住所 = Me.詳細.Controls("住所")         rs!メール = Me.詳細.Controls("メール")       rs.Update       '選択したレコードの削除       DoCmd.SetWarnings False       DoCmd.RunCommand acCmdDeleteRecord       DoCmd.SetWarnings True       DoCmd.GoToRecord , , acNewRec     End If   Else     MsgBox "そこにはデータがありません!!", , "確認"   End If   rs.Close: Set rs = Nothing   db.Close: Set db = Nothing End Sub 削除時のコードを入れていますが、使えればこのままでも。 何かわからないことがあれば補足してください。

関連するQ&A