• ベストアンサー

アクセスの追加クエリで教えてください。

非連結のフォームから、追加クエリを使ってテーブルにデータを追加したいのですが、 どうもうまくいきません。 具体的には、 履歴フォーム、というフォームで、 日付 施設名 内容 という項目があります。 追加クエリで、 [Forms]![履歴フォーム]![日付] のようにほかの項目も入力し、 その保存先は、 履歴テーブル、で、 項目は、履歴フォームと同じです。 履歴フォームにデータがまったく入っていない状態ですと、 追加クエリを実行した際、 0件のデータを追加します。となります。 自分でテーブルに直接データを何か入力すると、 次に追加クエリを実行した際、 1件のデータを追加します。となります。 続いて追加クエリ実行の際には2件、 その次は4件追加と、 テーブルに入っているデータの件数だけ、 そのときにフォームに入力されている情報が、追加されてしまいます。 どのような原因が考えられますでしょうか? お知恵を貸していただけたらと思います。 情報が不十分でしたらご指摘願います。 補足いたしますので。 それでは、よろしくお願いいたします。

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

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

その追加クエリーを SQL ビューでみるとどうなってますか? INSERT INTO T_TEST ( 日付, 施設名, 内容 ) SELECT [日付] AS 式1, [施設名] AS 式2, [内容] AS 式3 FROM T_TEST; のように FROM のテーブルが、データを追加しようとしているテーブルと同じテーブルになっているんじゃないでしょうか。 INSERT INTO T_TEST1 ( 日付, 施設名, 内容 ) SELECT [日付] AS 式1, [施設名] AS 式2, [内容] AS 式3; のように FROM なしにすれば1件づつ追加できると思います。

whiteboard
質問者

お礼

おっしゃるとおりの原因でした。 SQLビューで見ると一目瞭然なのですね。 どうもありがとうございました。

その他の回答 (3)

回答No.4

重複する訳ですね、了解しました。 では、履歴フォームのソーステーブルと履歴テーブルを使い、重複しないデータだけを書き込むようにすれば良いわけですね 選択クエリーを作成し、履歴フォームのソーステーブルを表示させます。 全てのフィールドをクエリフィールドに表示するし、履歴テーブルを出します。 次に、履歴フォームのソーステーブルと履歴テーブルのフィールドをそれぞれ結合し、履歴フォームのソーステーブルにあるレコードと一致するものだけを表示させるように選び、全てのフィールドを同じ様に結合してください。 左側に表示されている履歴フォームのソーステーブルから、履歴テーブルに矢印が向いている様になります。 次に、クエリーの種類を追加クエリーに変更し、追加先を履歴テーブルにします。 履歴テーブルの全フィールドを選択して、クエリフィールドに表示させ、追加フールドの部分を削除し、抽出条件に、Is Null(=nullと入れれば良いです)と入力すれば、履歴フォームのソーステーブルにあって、履歴テーブルに無い物だけが抽出されますので、御希望通りのものができると思いますよ

whiteboard
質問者

お礼

2度もご回答いただき本当にありがとうございました。 今回の原因は、何とか追究できました。 cafedemochaさんの回答も今後の参考にしたいとおもいます。 せっかくいろいろお知恵を貸してくださったのに ポイント、差し上げられなくてすみません。

  • vantage
  • ベストアンサー率60% (310/514)
回答No.2

>テーブルに入っているデータの件数だけ、 >そのときにフォームに入力されている情報が、追加されてしまいます。 それは追加クエリーが元テーブルを参照している形になっているからではないでしょうか。  INSERT INTO 履歴テーブル  SELECT フォーム上のコントロール >FROM 履歴テーブル になっていませんか? だとしたら、このFROM句は必要ありません。 クエリのデザインビューでいうと、 上の表示欄にある「履歴テーブル」を削除すれば良いはずです。

whiteboard
質問者

お礼

おっしゃるとおりの原因でした。 SQLビューで見ると一目瞭然なのですね。 どうもありがとうございました。

回答No.1

日付の形式は、どうなってます? 日付のL 形式などで、時間分秒まで入れる形で、関数にNOW()を使用していたら、もろ、そうなりますね。 日付の形式を短い物にして、関数もDATE()を使ってみると解消されるのではないかと思いますが、どんな関数を使用されているか教えて頂けますか?

whiteboard
質問者

補足

フォームで使っている関数ですよね? date()を使っています。 日付の形式は、自分では設定はしていません。 というよりも、そういう設定があることはしりませんでした。 早いご回答どうもありがとうございます。

関連するQ&A