• ベストアンサー

access2000でデータの変更の内容がわかるようにしたいのですが。

Watapo3の回答

  • Watapo3
  • ベストアンサー率76% (33/43)
回答No.5

klubサンのおっしゃる通り If NZ(Ctr.OldValue,"")<> NZ(Ctr.Value,"") Then の方がいいですね(^ ^) また、フィールド名を履歴として残すなら Ctr.Name   ↓ Ctr.ControlSource の方が良かったですね。 Ctr.Nameだとフィールド名とテキストボックス名が異なると、ちょっと困ってしまいますので・・・・ ご助言ありがとうございました。m(_ _)m

cas-jp
質問者

補足

Watapo3とklubさんありがとうございます。お二方に言われたとおりにしたところ、履歴が取れるようになりました!ただ言われた通りにしたつもりなのですが、なぜか履歴が必ず3つづつ取れてしまいます(T_T)。どこが悪いのでしょうか?下記の通りにしました。 まず、担当者フォームのイベントビルドのコードビルダへは、 Sub History_Tantou() Dim Ctr As Control Dim strSQL As String For Each Ctr In Me.Controls If Ctr.ControlType = 109 Then If Nz(Ctr.OldValue, "") <> Nz(Ctr.Value, "") Then strSQL = "insert into 履歴 values('担当者'," & Me.顧客コード & _ ",'" & Ctr.ControlSource & "','" & Ctr.OldValue & "',#" & Now() & "#)" DoCmd.SetWarnings False DoCmd.RunSQL strSQL DoCmd.SetWarnings True End If End If Next Ctr End Sub ・更新前処理へ、=[History_Tantou] ・更新後処理へ、=[Forms]("メイン").[Requery] 重要人物フォームのイベントビルドのコードビルダへは、 Sub History_jyuuyou() Dim Ctr As Control Dim strSQL As String For Each Ctr In Me.Controls If Ctr.ControlType = 109 Then If Ctr.OldValue <> Ctr.Value Then strSQL = "insert into 履歴 values('重要人物'," & Me.顧客コード & _ ",'" & Ctr.ControlSource & "','" & Ctr.OldValue & "',#" & Now() & "#)" DoCmd.SetWarnings False DoCmd.RunSQL strSQL DoCmd.SetWarnings True End If End If Next Ctr End Sub ・更新前処理へ、=[History_jyuuyou] ・更新後処理へ、=[Forms]("メイン").[Requery] 悪いところが見当もつきません。なので、他に何をお知らせすれば良いのかもわかりません。気になったのは、イベントビルドを書き込むと、左側にmicrosoft accessクラスオブジェクトというのがあると思うのですが、その下に、 form_jyuuyou、form_tantou、form_メインという3つができていました。あと、何かお知らせしたほうが良いことがありましたらご連絡ください。度々申し訳ありません。よろしくお願い申し上げますm(__)m

関連するQ&A

  • Access2007:フォームからに誤って上書きして元のデータが消えてしまった

    Access2007でフォームから誤って3件のデータを上書きしてしまいました。テーブルのデータが変更されてしまって、元にあったデータがなんて書いてあったのかわからなくなりました。アクセスでは、レコードを移動するたびに自動保存されるので、間違って上書きしたデータが保存されてしまい、元のデータがわからなくなりました。"戻る"ボタンで戻っても、レコードを上書きした後の状態までしか戻せませんでした。このような時、どうすれば元のデータがわかりますか?

  • ACCESSでデータ変更箇所が分かるようにする方法

    ACCESS初心者です。 顧客住所録管理をしていて、フォームで既存レコードのどこかのフィールドを変更したら、”変更日時”のフィールドに日時が入るように指定しました。 (全てのフィールドのプロパティ更新後処理に           Me![更新日時].Value = Now()     と設定。) 変更日時で抽出をかければ特定の日以後に変更のあったデータを抽出してくれるの ですが、どのフィールドが変更になったかは分かりません。 そこで、変更があったフィールドに色をつけるということはできないものかと考えました。 フォームの条件付書式で条件が真のときに色を塗るっていうのがありましたよね。 あんな感じのことがしたいのですが・・・。 各フィールドの更新後処理になにかVBAを付け加えればいいのでしょうか? 初心者なもので質問が的を得ていないのかもしれませんが、どなたかご教授頂ける方、よろしくお願いします。

  • Access2000(>_<)

    Access2000を使っています。 既存のデータベースからレコードを削除できないように設定したいと思っています。 そこで、フォームのデザインにて、フォームのプロパティを開き、「データ」タブで「削除の許可」を「いいえ」にしてから閉じてみたのですが、試しにテーブルでレコードを削除してみると、削除できてしまいます。 再びフォームのプロパティを見ると、「削除の許可」が「はい」に戻っています。変更が保存されていないようです。 同様に、特定のフィールドの上書きを禁止したいので、同じくフォームのデザインで、上書きを禁止したいフィールドのテキストボックスのプロパティの「データ」タブにて、「編集ロック」を「はい」にしてから閉じましたが、この変更も保存されておらず、編集ができるままの状態です。 どうすれば変更を保存できるのでしょうか…。 またほかに、レコードの削除を禁止する方法、特定のフィールドのみ上書きを禁止する方法があれば教えてください。初心者なのでわかりやすく教えていただけると助かります。よろしくお願いします。

  • Access2010 更新データのレポート表示

    Access初心者です。 新規データを入力しても、レポートが更新されずに困っています。 (テーブルや、フォーム内では、データは更新されています) エクセルデータをAccess2010にインポートして、元テーブルを作成しました。 元テーブルを元に、フォーム・レポート・検索クエリ(年度別・分類別)等を作成しました。 ここまでの作業で、新規データの入力はありませんでした。 ところが・・・ 新規データをフォームに入力すると、元テーブルは更新されますが、既に作成しているレポートには、新規レコードが表示(反映)されません。 更新されている元テーブルを元に、もう一度レポートを作成しても、新規レコードは表示されません。 ホームタブの「全て更新」ボタンをクリックしても、新規レコードはレポートには表示されません。 尚、Access初心者です。 「更新クエリ」なるものは、作成していません。というか、「更新クエリ」って何?状態です。 また、クエリそのものが良くわかっておらず、作成したクエリは全て「検索」のためのクエリで、抽出条件に「 [] 」を入力したり、フィールドに「 年度: Year(DateAdd("m",-3,[発送日])) 」を入力したりしかできません。 勿論、リレーションシップって何???状態です。 どうしたらよいのでしょうか??? どなたか、初心者でもわかるように、教えていただけないでしょうか? 宜しくお願いいたします。

  • Access2010で・・・

    Access初心者です。 社内でデータベースを作ることになり、分からないながらもやっていて、いざデータの入力をしようとすると問題が起きてしまいました。 クエリやフォームでデータを入力しレコードを追加して、上書き保存し画面を閉じて、また開くとクエリやフォームにレコードが追加されていないんです。 テーブルには、ちゃんと追加されています。 この原因は何でしょうか? お教えください。

  • ACCESS 同一フォームで異なるデータ表示できるか

    ACCESS初心者です。 ACCESSで住所録を作成し、普段はフォームで閲覧できるものを作成中です。 全てのデータを1つのテーブルにまとめると1000以上のレコードとなる為、グループごとに表示できればと思っています。(コンボボックスで一覧表示していますが、数が多すぎます) 1000のレコードはABCDE5つのグループ200人づつで構成されているとお考え下さい。 フォームは変更せず常に同一のものを使用したいです。表示するデータのみ何らかの方法で切り替えて表示したいと考えています。 どのような方法にすればそのような事ができるのでしょうか。 よろしくお願いします。

  • Access フォームの表示順をなおしたい

    いつもお世話になっています。 Access フォームを利用していたのですが、テーブルの既存データを更新してから、そのフォームでのデータ表示順が変わってしまいました。 レコードにはIDとして番号データがあるので、小さい順にフォームに表示させたいと思います。 ちなみに、元となるテーブルはID番号が小さい順に並んでいます。 よろしくお願いします。

  • Accessフォームのファイル名を変更して・・・

    お世話になります。 WIN98でAccess2000を使用しています。 (Access初心者です) 仕事でAccessにデータ入力をすることになりました。 既存のフォームに入力していくのですが、前回の データが入っているのでデータを消去しなければなりません。 とりあえず、テーブルのほうでデータをすべて削除をしました。 今度は既存のテーブル、フォーム、クエリ、レポートのファイル名を「A」から「B」に変更をしました。 ですが、フォーム、レポートを開くとファイル名は「A」のままなんです。いろんなところを見たのですが 結局わからなくて困っています。 あとはどこを変更するのでしょうか? (初歩的なことでスミマセン) それと、ExcelからAccessのテーブルへ データをインポートして、テーブルには無事データが インポートされたのですが、フォームにはそのデータが 反映されていませんでした。 インポートしたデータをフォームでも見れるようにするにはどこをいじったら良いのでしょうか? 本を見ても検索してみてもこんな初歩的な質問は無く 本当にお恥ずかしい内容なのですが、 宜しくお願い致します。

  • アクセスで変更ログを作成する

    MS-Access2000です。データ保護のため、変更ログを取ろうかと考えています。一応以下のような手順を計画中ですが、他によい方法やアドバイス等あればご教授下さい 1.対象テーブルをコピーしてバックアップテーブルを作る 2.対象テーブルに「更新フラッグ」フィールド(boolean)を追加する 3.通常の操作(入力作業)で、レコードに対する変更が行われれば「更新フラッグ」をたてる 4.入力作業終了時に更新フラッグが立っているレコードは、IDでリレーションをとり、バックアップテーブルから当該レコードを「変更履歴テーブル」に(日時と共に)書き出す 5.バックアップテーブルと、対象テーブルの同期を取り、更新フラッグを倒す ざっとこんなかんじですが結構面倒で、何かもっと簡便な方法がないかと思考中です。

  • アクセスでレコードの内容が変更されたかどうかを調べるには

    Win2000、Access2000を使用しています。 以下の作業をするためのVBを作成しているのですが、レコードの内容が変更されたかどうかを調べるためのコードとその他のコードとの組み立てがわからず困っています。 部分的にでもかまいませんので、おわかりになる方がいましたら教えてください。 1.フォーム上に作成した「戻るボタン」をクリックした時のイベントで、レコードの内容が変更されていたらメッセージボックスを表示する。 2.メッセージボックスの「はい」をクリックしたら、保存してフォームを閉じる。 3.メッセージボックスの「いいえ」をクリックしたら、変更されたフィールドの値を変更前の状態に戻してフォームを閉じる。 以上、よろしくお願いします。