- ベストアンサー
access2000で使用者を履歴に残したい
- access2000で使用者を履歴に残す方法を教えてください
- テーブルの更新者の規定値にcurrentuser()と入れれば履歴として残せるのか疑問です
- 使用者を顧客コードをキーに最終更新日の更新者を取り出す方法を教えてください
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
>strSQL = "insert into 履歴 values('担当者情報','" & Me.顧客コード & _ "','" & Ctr.ControlSource & "','" & Ctr.OldValue & "',#" & Now() & "#,'" & currentuser() & "','履歴ID')"としています。 上記「履歴ID」がオートナンバー型に相当すると思いますが、オートナンバー型は文字通り自動的に与えられます。 とって、履歴IDを指定する必要はありません。 strSQL = "insert into 履歴 values('担当者情報','" & Me.顧客コード & _ "','" & Ctr.ControlSource & "','" & Ctr.OldValue & "',#" & Now() & "#,'" & currentuser() & "')"
その他の回答 (5)
- Watapo3
- ベストアンサー率76% (33/43)
確認はしていないのですが、取り急ぎ・・・ =DLookUp("更新者","履歴","((顧客コード='" & [顧客コード] & _ "') AND (更新日 = #" & [最新更新日] & "#))" でどうですか? オートナンバー型を使用する場合のSQLは後ほど・・・
- Watapo3
- ベストアンサー率76% (33/43)
ちょっと紛らわしい表記があった為修正です。 >以前、最新の更新日を得るDLookUpは成功したと思いますので、 ↑ DMaxを使用して抽出したんでしたね! >=DLookUp("更新者","履歴","顧客コード=" & [顧客コード] & _ " AND 更新日時 = #" & [最新更新日] & "#" ↑ 更新日というフィールド名で作成していると思いますので・・・以下に変更 =DLookUp("更新者","履歴","顧客コード=" & [顧客コード] & _ " AND 更新日 = #" & [最新更新日] & "#" 以上です。m(_ _)m
補足
ほにゃ~!できませーん(*_*)エラーなのです。 挿入したテキストボックスのコントロールソースにwatapo3さんの教えてくれた式をコピーし、名前を「最新更新日」をしたのに・・・。 そうそう、急遽「顧客コード」が数値型からテキスト型に変更になったため、「'」の入力を必要とするんですよね! この式だと、下記のようになるんですよね?これでだめでした。 =DLookUp("更新者","履歴","顧客コード='" & [顧客コード] & _ "' AND 更新日 = #" & [最新更新日] & "#" (ちなみに顧客コードのテキスト型に伴う履歴の書き出し等にエラーがでたので、「']を導入して今までの所(今回の以外)は、無事解決しました! どうも、AND以降の式を認識していないようです。 上記の式を記入すると、「AND」は、「and」になってしまいます。(コピーで貼り付けたら大文字で入力できたのですが、やはりエラーです。) 認識されていれば、通常「and」は、「And」とaが大文字になりますよね?? 何か、もっと基本的なところで私が間違いをしているのでしょうか? 現在、テキストに「履歴ID」←(オートナンバー)を追加して、やってみているのですが、ちゃんと最新更新者名を取ってきました!ただし、問題は、履歴が取れなくなってしまったことなのです。 変更を行うと、「実行時エラー3464、抽出条件でデータ型が一致しません」とでます。デバックを選ぶと、「履歴ID」の書き出しのところ?がエラー?みたい? DoCmd.RunSQL strSQL ここが、黄色くなってました。 プロシージャーのところで、 strSQL = "insert into 履歴 values('担当者情報','" & Me.顧客コード & _ "','" & Ctr.ControlSource & "','" & Ctr.OldValue & "',#" & Now() & "#,'" & currentuser() & "','履歴ID')"としています。 コントロールソースのところで、 =DLookUp("更新者","履歴","履歴ID=" & DMax("履歴ID","履歴"))としています。 プロシージャーの履歴IDの指定の仕方が違っているのだと思います。(T_T)が、オートナンバー型のデータに対してどのような入力をすれば良いのかわかりません。 (オートナンバーは使用できるのでしょうか?) 教えてください。よろしくお願い申し上げます。
- Watapo3
- ベストアンサー率76% (33/43)
うぅ~む、自力での解決は無理でしたか・・・(^ ^; 以前、最新の更新日を得るDLookUpは成功したと思いますので、 そのコントロールの値を使用します。(コントロール名「最新更新日」と仮定) =DLookUp("更新者","履歴","顧客コード=" & [顧客コード] & _ " AND 更新日時 = #" & [最新更新日] & "#" 補足: 日付型は「#」で囲んでやる必要があります。 では、頑張って下さい。m(_ _)m・・・ちなみに更新者名の記録は成功したのだろうか(?_?)
補足
自力で頑張ろう!!と頑張ってはいるものの・・・。 >ちなみに更新者名の記録は成功したのだろうか(?_?) これは成功しております(^o^)丿 変更箇所のみの履歴をとるプロシージャーは、 strSQL = "insert into 履歴 values('担当者情報','" & Me.顧客コード & _ "','" & Ctr.ControlSource & "','" & Ctr.OldValue & "',#" & Now() & "#,'" & CurrentUser() & "')" テーブル全体の履歴を取るプロシージャーは、 strSQL = "insert into DM履歴 select * , '" & CurrentUser & "' as 更新者 FROM DM情報 '" & _ "where 顧客コード = " & Me.顧客コード になっておりますm(__)m ちなみに、=DLoolkUp("更新者","履歴","履歴ID=" & DMax("履歴ID","履歴")) で更新者はもってこれたものの・・・、履歴が取れなくなってしまいましたm(__)m
- Watapo3
- ベストアンサー率76% (33/43)
ははは、またポカをしてしまった(もう笑うしかない) strSQL = "insert into あ履歴 select * , '" & CurrentUser & "' as 更新者 FROM あ " & _ "where 顧客コード = " & Me.顧客コード 「*」と「'」の間に「,」を入れるのを忘れてしまったみたい(単純なタイプミス・・・・別に前後の半角スペースはあっても無くても結構です。) 申し訳ありませんでした。m(_ _)m
お礼
ひぇ~。watapo3さん(*_*)Please Help me!m(__)m あれから、数時間・・・。思い当たる式を書いてみました。。 とにかく思い当たる式を色々と・・・、でも、できなかった・・・(T_T)・・・ 後、履歴IDを取る方法を試してみました。履歴テーブルに「履歴ID」というテーブルを作成し、フォームに挿入したテキストのコントロールに、 =DLookUp("更新者","履歴","顧客コード=" & [顧客コード] & " AND 履歴ID = " & Max([履歴ID])) と書いてみたものの、これもダメだと・・・・。 この時に挿入したテキストのコントロール表記を削除して実行すると、今度は!履歴を取ることができなくなる・・・。テキストに履歴IDを追加したのが原因と言うことは判明したものの、これでは・・・履歴IDというテーブルを挿入できない(T_T)ほにゃ~(*_*) ちなみに現在、watapo3さんから教わった、変更されたところだけの履歴を取る方法と、変更されたときに全てのテーブルの履歴を取る方法、両方とも使用しておりますm(__)m 何とかなりますか?
補足
watapo3さーん! (T_T)(*_*)(@_@)(T_T) >これは本当にDLookUpで出来るでしょう(最終更新日を先に抽出していると仮定して)。顧客IDと最終更新日でユニークになるはずですので・・・。 「最終更新日を先に抽出していると仮定して」というのは、どこを見たら確認できるのでしょうか???? 最終更新者を表すテキストボックスを挿入し、 =DLookUp("更新者","履歴","顧客コード=" & [顧客コード]) と、書いたのですが、最初に見つけたものを拾ってきてしまいます(T_T) これって、最終更新日を先に抽出していないということですか? 以前言われたように、履歴IDを作成する必要がありますでしょうか?
- Watapo3
- ベストアンサー率76% (33/43)
「あ履歴」テーブルに「更新者(テキスト型)」を作成します。 で、以下に変更 strSQL = "insert into あ履歴 select * '" & CurrentUser & "' as 更新者 FROM あ " & _ "where 顧客コード = " & Me.顧客コード でOK(^ ^) そんでもって、 >ここで作成した使用者を顧客コードをキーに最終更新日の更新者を取り出すとい >う、ややこしくてわけがわからなくなりそうなことも可能でしょうか? これは本当にDLookUpで出来るでしょう(最終更新日を先に抽出していると仮定して)。顧客IDと最終更新日でユニークになるはずですので・・・。
補足
watapo3さん、変更をかけてみました(T_T)しかし、 DoCmd.RunSQL strSQL で「ダメ」と言われてしまいます。なぜ~??でしょうか? エラーメッセージは、実行時エラー3075 クエリ式'*"'admin"の構文エラー:演算子がありません。 でした。 よろしくお願い申し上げますm(__)m
お礼
m(__)m できました(^o^)丿 本当にいろいろありがとうございました。(T_T) これで、やっと安らかな眠りにつくことができます(^.^) watapo3さんに鍛えられて?少しは成長したかな~??(~_~;) とっても、とっても助かりましたm(__)m ありがとうございましたm(__)m お礼として、1万pointぐらい差し上げたいところですが、何分手持ちが20pointしかないもので・・・・、申し訳ありませんm(__)m