ネットが遅くてイライラしてない!?

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

このQ&Aに関連する最新のQ&A

A 回答 (2件)

単票フォームの場合ですが


各フィールドの更新後イベントで
フィールド名.OldValueプロパティで変更前の値を取得できます。これと現在の値を比較して異なっていればフィールド名.BackColorで背景色を変更するっていうのはどうでしょう?

帳票フォームの場合は使えませんが。
    • good
    • 0
この回答へのお礼

ありがとうございました。
早速チャレンジしてみます。

お礼日時:2001/02/23 09:31

これは、レコードの更新日時のほかに、各フィールドことに更新日時を保存するしかないでしょうね。



各フィールドの更新後処理に、
sub ほげ_Afterupdate()
 me![ほげ更新日時] = now()
end sub
みたいなコードを書いてやって、これが指定日以降のものだけを色換えするように条件付書式を設定してやると。

それ以外の方法としては、フォームのAfterUpdate時に、#1,CHOROLYNさん方法で更新されたフィールドを特定して、更新ログのようなものを作成するとか。

ちなみに、前者は作成するのが簡単ですが、柔軟性に欠けます。後者は、作るのにそれなりの労力を必要としますが、より詳しい変更履歴を得ることが出来ます。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
どちらの方法をとるかもう少し検討してみます。

お礼日時:2001/02/26 11:25

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccessで更新履歴情報を保存(表示)する方法を教えてください。

Accessで、顧客管理を作っているのですが担当者が変更される事が多くあります。
この場合、データを上書き保存するのではなく、別ファイル(更新情報ファイル)に、変更前の情報を随時自動的に書き込んでいきたいのですが、どの様な方法があるか教えてください。

Aベストアンサー

ご指名ありがとうございますm(_ _)m

えぇ、前回(No.164850)の3番目の方法が良いとの事で・・・・

まず、担当者の変更履歴用のテーブル(担当者履歴)、重要人物の変更履歴用のテーブル(重要人物履歴)を用意します。
テーブルの中身(フィールド)は、担当者情報・重要人物情報のテーブルをコピーして、それに変更日時フィールド(日付/時刻型)を加えたものとし、更新日時フィールドの規定値を「Now()」としてください。
もし、元のテーブルでオートナンバー型を使用している場合は履歴用テーブルでは数値型に変更してください。

次に前回記述したコードの内、strSQL=・・・以降の部分を変更します。
(担当者変更時)
strSQL = "insert into 担当者履歴 select * FROM 担当者情報 " & _
  "where 担当者ID = " & Me.担当者ID

(重要人物変更時)
strSQL = "insert into 重要人物履歴 select * FROM 重要人物情報 " & _
  "where 重要人物ID = " & Me.重要人物ID

上記の場合、担当者・重要人物の格納してあるテーブルをそれぞれ担当者情報(主キー:担当者ID)、重要人物情報(主キー:重要人物ID)と仮定してあります。適宜変更してください。
また、今回のケースでフィールド数が同一であればUNIONを使用して一つのサブフォームに更新情報を表示することもできますが、同一でない場合やフィールド名の関係もありますので、それぞれを二つのサブフォームに表示してみる方法ではまずいでしょうか(^ ^;

ご指名ありがとうございますm(_ _)m

えぇ、前回(No.164850)の3番目の方法が良いとの事で・・・・

まず、担当者の変更履歴用のテーブル(担当者履歴)、重要人物の変更履歴用のテーブル(重要人物履歴)を用意します。
テーブルの中身(フィールド)は、担当者情報・重要人物情報のテーブルをコピーして、それに変更日時フィールド(日付/時刻型)を加えたものとし、更新日時フィールドの規定値を「Now()」としてください。
もし、元のテーブルでオートナンバー型を使用している場合は履歴用テーブルで...続きを読む

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

Win2000、Access2000を使用しています。
以下の作業をするためのVBを作成しているのですが、レコードの内容が変更されたかどうかを調べるためのコードとその他のコードとの組み立てがわからず困っています。
部分的にでもかまいませんので、おわかりになる方がいましたら教えてください。

1.フォーム上に作成した「戻るボタン」をクリックした時のイベントで、レコードの内容が変更されていたらメッセージボックスを表示する。
2.メッセージボックスの「はい」をクリックしたら、保存してフォームを閉じる。
3.メッセージボックスの「いいえ」をクリックしたら、変更されたフィールドの値を変更前の状態に戻してフォームを閉じる。

以上、よろしくお願いします。

Aベストアンサー

ヒントだけ…
フォーム上の連結コントロールの値が変更されたかどうかを知るのは <oldvalue>プロパティを使用します。

If Me!コントロール名.value <> Me!コントロール名.oldvalue then …
と比較することで、変更されたかどうかを知ることが出来ます。
また
Me!コントロール名.value = Me!コントロール名.oldvalue
で、変更前の値に戻すこともできます。

詳細は参考URLやヘルプを参照して下さい。
では、頑張って下さい。

参考URL:http://homepage1.nifty.com/tsware/tips/tips_219.htm

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

QACCESSでフォームを使って、テーブルを参照、データ入力、データ更新をしたいのです

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入力画面
       ↓
レコード番号を入れると、そのレコードのデーターが画面に表示され、
その画面で修正可能
       ↓
 保存 ボタンで保存

という流れです。

レコードナンバーはIDを使おうと思っています。

データの量が莫大な為、コンポボックスなどは使えません。

できるだけ、VBAなどは使わずに作りたいです。

よろしくお願い致します。

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入...続きを読む

Aベストアンサー

まずそのテーブルを基にしてフォームを作成します。
そのフォームのヘッダー部分にテキストボックスを配置後、一旦
上書き保存。
フォームのレコードソースを
SELECT *
FROM テーブル名 WHERE ID=[Forms]![フォーム名]![テキストボックス名]
とします。
次にテキストボックスの更新後処理に
Me.Requery
とすれば完成です。
フォームを開いてテキストボックスにID入力後エンターしてください。

保存に関しては、コマンドボタン作成後クリック時イベントに
DoCmd.RunCommand acCmdSaveRecord
とすれば良いでしょう。

この手のモノは検索すれば相当数ヒットするので、そちらを参考にされるのもよろしいかと。

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QACCESSで条件によってフォーム上のフィールドの色を変更

一覧形式のフォームがあり、条件によって色を変更したいのですが、その条件というのが下記のような感じです。

フィールドA | フィールドB | フィールドC | チェックボックス
チェックボックスのチェックがあったら、フィールドA・B・Cの色をグレーにする。
チェックがなかったら白いまま。

というものです。
条件付書式だと、色を変更するフィールドそのもののデータを参照にしないといけないんですよね?
フォームオープンのところにVBAをかいてみたんですが、ひとつひとつは認識してないみたいで…。
どのようにすればいいのでしょうか?

よろしくお願いします。

Aベストアンサー

フォームのデザイン画面で3つのフィールドすべて選択し条件付書式画面を表示させる。
条件1のコンボで”式”を選択。
右側の欄に[チェックボックスのコントロール名]=True
と入力し、バケツアイコンでグレーを選択。
(もちろん1フィールドづつ設定してもOK)

Q【ACCESS】フォーム名/コントロール名を文字列型変数で指定するには

バージョン:Access2002

フォーム「frm01」にテキストボックス「tb01」が作ってある場合、
Forms.frm01.tb01.Value="あいう"
とすれば、フォームもコントロールも指定できるのですが、
Dim strTxt As String
strTxt = "tb01"
Forms.frm01.strTxt.Value="あいう"
だと、文字列型変数"strTxt"が展開されないのでフォーム「frm01」のコントロール「strTxt」を探してしまいエラーになってしまいます。

文字列型変数でフォームやコントロールを指定するには、どのようにすればよいのでしょうか?

Aベストアンサー

フォームの場合
 Forms(strFrm)

フォームのコントロールの場合
 Forms(strFrm).Controls(strTxt)


これでも参照できますが、普通ここまで省略しませんね。
 Forms(strFrm)(strTxt)

あとで見たとき、訳がわからなくなりそう。

Qアクセエスのレコードの更新をVBAでするには?

アクセスで、一覧表のフォームにボタンを取りつけています。レコードの内容を変更したら、ペンの形のマークが現れますね。これは変更中ということですが、そこでボタンを押しても変更は確定されないから、更新確定させたいのです。

それで、DoCmd.Requery を最初の行に入れてみたら、元の一覧表は最初のレコードに飛んでしまう。

元の一覧表の位置を動かさないために、Ctrl+Enter キーを押して更新確定させたような状態をVBAで実現する方法あるのでしょうか?

よろしくお願いします。

Aベストアンサー

No1 です。
今回の場合には
Docmd.RunCommand acCmdSaveRecord の方が良かったですね
文字通りレコードを保存します。
Requery に引きづられてしまいました (^_^;)

Recalc、Refresh、Requery の使い分けは下記が参考にはなりますか?
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QAccess サブフォームでの選択行の取得

こんにちは。

Access初心者です。

サブフォームでテーブルの項目を表示させていますが、
選択された行を取得する方法はありますか?
サボフォームの下の方に現在選択されているレコード数が表示されてますが、その値でかまいません。

調べているのですが、なかなか検討がつきません。
宜しくお願い致します。

Aベストアンサー

フォーム名がフォーム1、サブフォームコントロールの名前がサブフォーム1だとすると、

Forms!フォーム1!サブフォーム1.Form.CurrentRecord

で取得できます。
(「Forms」と「Form」がありますのでご注意下さい)


また、フォーム1にコードを記述する場合であれば

Me!サブフォーム1.Form.CurrentRecord

サブフォーム1へのコード記述であれば

Me.CurrentRecord

という構文によっても、それぞれ取得が可能です。

Qアクセスのテーブルの差分の抽出について

アクセスの初心者です。今、仕事でデーターの差分の抽出の仕方についてわからず困っています。
2つのテーブルがあります。
テーブルには100以上の項目と500件ほどのレコードがそれぞれ入っています。
この2つのテーブルを比較して差分を出したいのですが方法が思いつきません。
出したいものは、テーブル1とテーブル2の共通のIDを比較し、
テーブル1からテーブル2で変更、追加されたものを出したいのです。
レコードの追加だけなら差分クエリを利用してやれると思うのですが、
100以上の全フィールドをそれぞれ比較するとなるとどうすれば良いのかわからないのです。
2つのテーブルの項目は基本一緒ですが、追加されたり、変更されたりします。

もともとはエクセルのデータで毎週やりとりされるもので、
エクセル上で手作業で、
シート1とシート2でマッチングを行い、シート3に追加、変更されたものを書き出しています。

100列ほどの項目も追加や変更されるので、前回データと今回データで
(1)列の比較をして2つの列数を揃えてから、
(2)KEYになる列でVLOOKUP関数を使い、追加されたデータをよけて、
(3)前回データと今回データが一緒のデーター並べ替え、揃えて、シートを比較して変更、追加を探す
という作業を行っています。

データー数が多く、エクセルでは限界がでてきました。
また、アクセスを使えば簡単にできる。と言われましたが、
まだまだ初心者のため、この大量のデータをどう処理すればいいのかわかりません。

質問は、
(1)アクセスで100項目以上あるテーブルのそれぞれの差分をだすことができるのでしょうか?
(2)その方法はどうすればよいのでしょうか?
また、アクセス初心者でも勉強すればすぐにできるのでしょうか?
と、いうことです。
会社に迷惑をかけないためにも、可能、不可能を判断したいです。
よろしくお願いいたします。

アクセスの初心者です。今、仕事でデーターの差分の抽出の仕方についてわからず困っています。
2つのテーブルがあります。
テーブルには100以上の項目と500件ほどのレコードがそれぞれ入っています。
この2つのテーブルを比較して差分を出したいのですが方法が思いつきません。
出したいものは、テーブル1とテーブル2の共通のIDを比較し、
テーブル1からテーブル2で変更、追加されたものを出したいのです。
レコードの追加だけなら差分クエリを利用してやれると思うのですが、
100以上の全フィールドをそ...続きを読む

Aベストアンサー

まず、テーブル1とテーブル2の全フィールドが合致するものを抽出するクエリを作成します。デザインビューで二つのテーブルの対応するフィールドを全て結合線で結べば良いですね。
クエリで出力するフィールドはテーブル2のフィールドのみとします。(テーブル1のみにしても、この場合は結果は同じだと思いますが)。これをクエリ1とします。
次にテーブル2と、クエリ1のIDについて不一致クエリを作成すれば、テーブル2の内で、テーブル1に無いものだけが抽出できると思いますがいかがでしょうか。(もし、テーブル1の内で、テーブル2に無いものを抽出したいのなら、適宜読み替えて同様に行って下さい)
ご参考まで。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング