• ベストアンサー

ACCESS2000でとっても困っています。履歴がたくさんとれてしまうのです。

アクセス初心者です。とても困っています。 困っているのは、履歴は書き出すのですが、複数書き出してしまうということなのです。 詳しく申し上げますと、 フォーム「テレ_sb(table:テレ)」に変更があった場合に、履歴「SF_テレ履歴(table:テレ履歴)」を書き出すことを行っています。 顧客ID毎に履歴を取るようにしているのですが、「A」ユーザーに変更を行うと、「A」ユーザーの履歴を取ってくる。ここまでは良いのですが、フォームのテレ_sb(table:テレ)に情報が入っているもの全てについて履歴を取ってしまうのです。 つまり、table:テレ(フォーム:テレ_sb)に10ユーザーの情報が入っているとすると、「A」について変更を行うと、10ユーザー全ての履歴を取ってきてしまうのです。 <<フォーム>>メイン、テレ_sb(table:テレ)、SF_テレ履歴(table:テレ履歴)があります。 テレ_sb(table:テレ)のイベントプロシージャーには以下のように書いております。上記の点、防ぐ方法をどなたかご教授ください。よろしくお願い申し上げます。 Sub History_tel() Dim Ctr As Control Dim strSQL As String For Each Ctr In Me.Controls If ((Ctr.ControlType = acTextBox) Or (Ctr.ControlType = acComboBox)) Then If Ctr.OldValue <> Ctr.Value Then strSQL = "insert into テレ履歴 select * , '" & CurrentUser & "' as 更新者 FROM テレ '" & _ "where 顧客コード = " & Me.顧客コード DoCmd.SetWarnings False DoCmd.RunSQL strSQL DoCmd.SetWarnings True Exit Sub End If End If Next Ctr End Sub Private Sub Form_BeforeUpdate(Cancel As Integer) History_tel End Sub Private Sub Form_AfterUpdate() Forms("メイン").Form.SF_テレ履歴.Requery End Sub

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

  • ベストアンサー
回答No.2

こんにちは > 「A」について変更を行うと、10ユーザー全ての履歴を取ってきてしまうのです。 顧客の指定が抜けているものと思われます 下記SQL文に置き換えて使用してみてください '~~~~~~~~~~~~~~~~~~~~ strSQL = "INSERT INTO テレ_履歴 ( 更新者 ) " & _ "SELECT テレ.*, '" & CurrentUser & "' AS 更新者 " & _ "From テレ " & _ "WHERE (((テレ.顧客コード)=" & Me.[顧客コード].Value & "));" '~~~~~~~~~~~~~~~~~~~~ フォーム構造ですが、メインフォーム「テレ_sb」の中にサブフォーム「SF_テレ履歴」があるんですよね? でしたら、サブフォームのプロパティの中に「リンク子フィールド」と「リンク親フィールド」があると思います。 その値が”顧客コード”になっているのが望ましいと思います

その他の回答 (1)

  • teppy
  • ベストアンサー率50% (9/18)
回答No.1

おつかれさまです 何点か気付いた点を記します >strSQL = "insert into テレ履歴 select * , '" & CurrentUser & "' as 更新者 FROM テレ '" & _ >"where 顧客コード = " & Me.顧客コード このSQL文ですが、"~ FROM テレ '"の"テレ"の後ろに書いてある"'"はいりません >つまり、table:テレ(フォーム:テレ_sb)に10ユーザーの情報が入っているとすると、「A」について変更を行うと、10ユーザー全ての履歴を取ってきてしまうのです。 フォーム構造ですが、メインフォームとサブフォームは関連付けされているのでしょうか? 今回の掲題だと「顧客コード」にて、関連付けされていることが望ましいですね また考えれることが、「テレ」テーブルの内容をすべて「テレ履歴」テーブルに書き込むということが発生していると思われます。 SQL文作成後にブレイクをはって、SQL文の内容をイミディエイトウィンドウにて確認してみるのが、宜しいかと思います。 (1)"DoCmd.SetWarnings False"にてブレイクをはる (2)イミディエイトウィンドウにて、「print strsql」とかきENTER (3)表示されたSQL文をクエリのSQLウィンドウにコピーし、内容が正しく実行するか確認する ちなみに正常動作の確認は行いました。 問題なく動作すると思いますよ(^^)/

cas-jp
質問者

補足

お答え有難うございますm(__)m 残念ながら、だめでした。(T_T) SQL文の"~ FROM テレ '"の"テレ"の後ろに書いてある"'"を削除すると、「パラメータの入力」を聞いてきます。(1)-(3)の作業は、初めてしてみました。何とか作業はできたのですが、こちらでも同様でした。 「フォーム構造のメインフォームとサブフォームは関連付け」についてですが、これは、リレーションシップのことでしょうか?(メインフォームの元となるテーブル「元データ」とサブフォームの元となるテーブル「テレ」は、顧客コードでリレーションシップしてますが・・・、それ以外のことならばできていないと思います。) でも、なぜなんでしょう(T_T)あーー助けてください。m(__)m何か他に確認する所はないでしょうか?

関連するQ&A

専門家に質問してみよう