- 締切済み
Accessでレコードの削除履歴を残したい。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- piroin654
- ベストアンサー率75% (692/917)
もう一つ。 レコードの削除自体はツールバーにある レコードの削除ボタンをクリックしてしまうと 削除されてしまいますが、この場合は ログが取れません。なるべくならツールバーの 「起動時の設定」など「組み込みツールバー」の チェックをはずして「レコードの削除」ボタン をかくしておくようにするとか、あるいはコードで カスタムのツールバーを設定するとかいろいろ ありますが、複雑になるので割愛しておきます。
- piroin654
- ベストアンサー率75% (692/917)
たびたびすみません。 ENTERキーでレコード内を移動するとき、 ボタンにフォーカスが当たるとメッセージ ボックスが表示されるので、ボタンの プロパティで「タブストップ」を「いいえ」 に設定しておいてください。
- piroin654
- ベストアンサー率75% (692/917)
回答の(2)のコードの中で、 Set rs = db.OpenRecordset("T顧客削除ログ", dbOpenDynaset) となっていますが、 Set rs = db.OpenRecordset("T削除ログ", dbOpenDynaset) としてください。テーブル名が違っていました。 あるいは、何の削除ログか分かりやすくするのならば、 「Tテーブル名削除ログ」 としてほうがいいかもしれません。
- piroin654
- ベストアンサー率75% (692/917)
画像の中のコントロールの種類がわかりにくいのですが、 一応、チェックボックスなどもあるのだろう、という 前提で。 フォームは表形式で、レコードを表示しているのは サブフォームではないものとします。 (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 削除時のコードを入れていますが、使えればこのままでも。 何かわからないことがあれば補足してください。