OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

access2000で使用者を履歴に残したい。

  • すぐに回答を!
  • 質問No.172702
  • 閲覧数216
  • ありがとう数2
  • 気になる数0
  • 回答数6
  • コメント数0

お礼率 38% (15/39)

履歴を取るのに「更新者=使用者」これは、currentuserですよね!
「テーブル全体を履歴に残す」バージョンでテーブルの更新者の規定値にcurrentuser()と入れればできる!と思ったのですが、テーブルではその式は利用できませんでした。モジュールに何か書き込まないとできないのでしょうか?
現在のモジュールは以下の通りです。
Sub History_a()

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 あ履歴 select * FROM あ " & _
"where 顧客コード = " & Me.顧客コード
DoCmd.SetWarnings False
DoCmd.RunSQL strSQL
DoCmd.SetWarnings True
Exit Sub
End If
End If
Next Ctr
End Sub

ここで作成した使用者を顧客コードをキーに最終更新日の更新者を取り出すという、ややこしくてわけがわからなくなりそうなことも可能でしょうか?
通報する
  • 回答数6
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.6
レベル9

ベストアンサー率 76% (33/43)

>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() & "')"
-PR-
-PR-

その他の回答 (全5件)

  • 回答No.1
レベル9

ベストアンサー率 76% (33/43)

「あ履歴」テーブルに「更新者(テキスト型)」を作成します。 で、以下に変更 strSQL = "insert into あ履歴 select * '" & CurrentUser & "' as 更新者 FROM あ " & _   "where 顧客コード = " & Me.顧客コ ...続きを読む
「あ履歴」テーブルに「更新者(テキスト型)」を作成します。

で、以下に変更
strSQL = "insert into あ履歴 select * '" & CurrentUser & "' as 更新者 FROM あ " & _
  "where 顧客コード = " & Me.顧客コード

でOK(^ ^)

そんでもって、
>ここで作成した使用者を顧客コードをキーに最終更新日の更新者を取り出すとい
>う、ややこしくてわけがわからなくなりそうなことも可能でしょうか?

これは本当にDLookUpで出来るでしょう(最終更新日を先に抽出していると仮定して)。顧客IDと最終更新日でユニークになるはずですので・・・。
補足コメント
cas-jp

お礼率 38% (15/39)

watapo3さん、変更をかけてみました(T_T)しかし、
DoCmd.RunSQL strSQL
で「ダメ」と言われてしまいます。なぜ~??でしょうか?
エラーメッセージは、実行時エラー3075
クエリ式'*"'admin"の構文エラー:演算子がありません。
でした。
よろしくお願い申し上げますm(__)m
投稿日時 - 2001-11-22 19:01:32

  • 回答No.2
レベル9

ベストアンサー率 76% (33/43)

ははは、またポカをしてしまった(もう笑うしかない) strSQL = "insert into あ履歴 select * , '" & CurrentUser & "' as 更新者 FROM あ " & _   "where 顧客コード = " & Me.顧客コード 「*」と「 ...続きを読む
ははは、またポカをしてしまった(もう笑うしかない)

strSQL = "insert into あ履歴 select * , '" & CurrentUser & "' as 更新者 FROM あ " & _
  "where 顧客コード = " & Me.顧客コード

「*」と「'」の間に「,」を入れるのを忘れてしまったみたい(単純なタイプミス・・・・別に前後の半角スペースはあっても無くても結構です。)

申し訳ありませんでした。m(_ _)m
補足コメント
cas-jp

お礼率 38% (15/39)

watapo3さーん!
(T_T)(*_*)(@_@)(T_T)

>これは本当にDLookUpで出来るでしょう(最終更新日を先に抽出していると仮定して)。顧客IDと最終更新日でユニークになるはずですので・・・。

「最終更新日を先に抽出していると仮定して」というのは、どこを見たら確認できるのでしょうか????
最終更新者を表すテキストボックスを挿入し、
=DLookUp("更新者","履歴","顧客コード=" & [顧客コード])
と、書いたのですが、最初に見つけたものを拾ってきてしまいます(T_T)
これって、最終更新日を先に抽出していないということですか?
以前言われたように、履歴IDを作成する必要がありますでしょうか?
投稿日時 - 2001-11-22 22:52:32
お礼コメント
cas-jp

お礼率 38% (15/39)

ひぇ~。watapo3さん(*_*)Please Help me!m(__)m
あれから、数時間・・・。思い当たる式を書いてみました。。
とにかく思い当たる式を色々と・・・、でも、できなかった・・・(T_T)・・・
後、履歴IDを取る方法を試してみました。履歴テーブルに「履歴ID」というテーブルを作成し、フォームに挿入したテキストのコントロールに、
=DLookUp("更新者","履歴","顧客コード=" & [顧客コード] & " AND 履歴ID = " & Max([履歴ID]))
と書いてみたものの、これもダメだと・・・・。
この時に挿入したテキストのコントロール表記を削除して実行すると、今度は!履歴を取ることができなくなる・・・。テキストに履歴IDを追加したのが原因と言うことは判明したものの、これでは・・・履歴IDというテーブルを挿入できない(T_T)ほにゃ~(*_*)
ちなみに現在、watapo3さんから教わった、変更されたところだけの履歴を取る方法と、変更されたときに全てのテーブルの履歴を取る方法、両方とも使用しておりますm(__)m
何とかなりますか?
投稿日時 - 2001-11-23 02:08:55
  • 回答No.3
レベル9

ベストアンサー率 76% (33/43)

うぅ~む、自力での解決は無理でしたか・・・(^ ^; 以前、最新の更新日を得るDLookUpは成功したと思いますので、 そのコントロールの値を使用します。(コントロール名「最新更新日」と仮定) =DLookUp("更新者","履歴","顧客コード=" & [顧客コード] & _   " AND 更新日時 ...続きを読む
うぅ~む、自力での解決は無理でしたか・・・(^ ^;

以前、最新の更新日を得るDLookUpは成功したと思いますので、
そのコントロールの値を使用します。(コントロール名「最新更新日」と仮定)

=DLookUp("更新者","履歴","顧客コード=" & [顧客コード] & _
  " AND 更新日時 = #" & [最新更新日] & "#"

補足:
日付型は「#」で囲んでやる必要があります。

では、頑張って下さい。m(_ _)m・・・ちなみに更新者名の記録は成功したのだろうか(?_?)
補足コメント
cas-jp

お礼率 38% (15/39)

自力で頑張ろう!!と頑張ってはいるものの・・・。

>ちなみに更新者名の記録は成功したのだろうか(?_?)
これは成功しております(^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
投稿日時 - 2001-11-24 09:54:32
  • 回答No.4
レベル9

ベストアンサー率 76% (33/43)

ちょっと紛らわしい表記があった為修正です。 >以前、最新の更新日を得るDLookUpは成功したと思いますので、 ↑ DMaxを使用して抽出したんでしたね! >=DLookUp("更新者","履歴","顧客コード=" & [顧客コード] & _   " AND 更新日時 = #" & ...続きを読む
ちょっと紛らわしい表記があった為修正です。

>以前、最新の更新日を得るDLookUpは成功したと思いますので、

DMaxを使用して抽出したんでしたね!

>=DLookUp("更新者","履歴","顧客コード=" & [顧客コード] & _
  " AND 更新日時 = #" & [最新更新日] & "#"

更新日というフィールド名で作成していると思いますので・・・以下に変更

=DLookUp("更新者","履歴","顧客コード=" & [顧客コード] & _
  " AND 更新日 = #" & [最新更新日] & "#"


以上です。m(_ _)m
補足コメント
cas-jp

お礼率 38% (15/39)

ほにゃ~!できませーん(*_*)エラーなのです。
挿入したテキストボックスのコントロールソースに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)が、オートナンバー型のデータに対してどのような入力をすれば良いのかわかりません。
(オートナンバーは使用できるのでしょうか?)
教えてください。よろしくお願い申し上げます。
投稿日時 - 2001-11-24 01:04:02
  • 回答No.5
レベル9

ベストアンサー率 76% (33/43)

確認はしていないのですが、取り急ぎ・・・ =DLookUp("更新者","履歴","((顧客コード='" & [顧客コード] & _   "') AND (更新日 = #" & [最新更新日] & "#))" でどうですか? オート ...続きを読む
確認はしていないのですが、取り急ぎ・・・

=DLookUp("更新者","履歴","((顧客コード='" & [顧客コード] & _
  "') AND (更新日 = #" & [最新更新日] & "#))"

でどうですか?

オートナンバー型を使用する場合のSQLは後ほど・・・
お礼コメント
cas-jp

お礼率 38% (15/39)

m(__)m できました(^o^)丿

本当にいろいろありがとうございました。(T_T)
これで、やっと安らかな眠りにつくことができます(^.^)

watapo3さんに鍛えられて?少しは成長したかな~??(~_~;)
とっても、とっても助かりましたm(__)m
ありがとうございましたm(__)m
お礼として、1万pointぐらい差し上げたいところですが、何分手持ちが20pointしかないもので・・・・、申し訳ありませんm(__)m
投稿日時 - 2001-11-24 19:54:49
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ