- ベストアンサー
アクセスの追加クエリで教えてください。
非連結のフォームから、追加クエリを使ってテーブルにデータを追加したいのですが、 どうもうまくいきません。 具体的には、 履歴フォーム、というフォームで、 日付 施設名 内容 という項目があります。 追加クエリで、 [Forms]![履歴フォーム]![日付] のようにほかの項目も入力し、 その保存先は、 履歴テーブル、で、 項目は、履歴フォームと同じです。 履歴フォームにデータがまったく入っていない状態ですと、 追加クエリを実行した際、 0件のデータを追加します。となります。 自分でテーブルに直接データを何か入力すると、 次に追加クエリを実行した際、 1件のデータを追加します。となります。 続いて追加クエリ実行の際には2件、 その次は4件追加と、 テーブルに入っているデータの件数だけ、 そのときにフォームに入力されている情報が、追加されてしまいます。 どのような原因が考えられますでしょうか? お知恵を貸していただけたらと思います。 情報が不十分でしたらご指摘願います。 補足いたしますので。 それでは、よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
その追加クエリーを 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件づつ追加できると思います。
その他の回答 (3)
- cafedemocha
- ベストアンサー率29% (232/789)
重複する訳ですね、了解しました。 では、履歴フォームのソーステーブルと履歴テーブルを使い、重複しないデータだけを書き込むようにすれば良いわけですね 選択クエリーを作成し、履歴フォームのソーステーブルを表示させます。 全てのフィールドをクエリフィールドに表示するし、履歴テーブルを出します。 次に、履歴フォームのソーステーブルと履歴テーブルのフィールドをそれぞれ結合し、履歴フォームのソーステーブルにあるレコードと一致するものだけを表示させるように選び、全てのフィールドを同じ様に結合してください。 左側に表示されている履歴フォームのソーステーブルから、履歴テーブルに矢印が向いている様になります。 次に、クエリーの種類を追加クエリーに変更し、追加先を履歴テーブルにします。 履歴テーブルの全フィールドを選択して、クエリフィールドに表示させ、追加フールドの部分を削除し、抽出条件に、Is Null(=nullと入れれば良いです)と入力すれば、履歴フォームのソーステーブルにあって、履歴テーブルに無い物だけが抽出されますので、御希望通りのものができると思いますよ
お礼
2度もご回答いただき本当にありがとうございました。 今回の原因は、何とか追究できました。 cafedemochaさんの回答も今後の参考にしたいとおもいます。 せっかくいろいろお知恵を貸してくださったのに ポイント、差し上げられなくてすみません。
- vantage
- ベストアンサー率60% (310/514)
>テーブルに入っているデータの件数だけ、 >そのときにフォームに入力されている情報が、追加されてしまいます。 それは追加クエリーが元テーブルを参照している形になっているからではないでしょうか。 INSERT INTO 履歴テーブル SELECT フォーム上のコントロール >FROM 履歴テーブル になっていませんか? だとしたら、このFROM句は必要ありません。 クエリのデザインビューでいうと、 上の表示欄にある「履歴テーブル」を削除すれば良いはずです。
お礼
おっしゃるとおりの原因でした。 SQLビューで見ると一目瞭然なのですね。 どうもありがとうございました。
- cafedemocha
- ベストアンサー率29% (232/789)
日付の形式は、どうなってます? 日付のL 形式などで、時間分秒まで入れる形で、関数にNOW()を使用していたら、もろ、そうなりますね。 日付の形式を短い物にして、関数もDATE()を使ってみると解消されるのではないかと思いますが、どんな関数を使用されているか教えて頂けますか?
補足
フォームで使っている関数ですよね? date()を使っています。 日付の形式は、自分では設定はしていません。 というよりも、そういう設定があることはしりませんでした。 早いご回答どうもありがとうございます。
お礼
おっしゃるとおりの原因でした。 SQLビューで見ると一目瞭然なのですね。 どうもありがとうございました。