アプリ版:「スタンプのみでお礼する」機能のリリースについて

非連結のフォームから、追加クエリを使ってテーブルにデータを追加したいのですが、
どうもうまくいきません。

具体的には、
履歴フォーム、というフォームで、
日付
施設名
内容
という項目があります。

追加クエリで、
[Forms]![履歴フォーム]![日付]
のようにほかの項目も入力し、
その保存先は、
履歴テーブル、で、
項目は、履歴フォームと同じです。

履歴フォームにデータがまったく入っていない状態ですと、
追加クエリを実行した際、
0件のデータを追加します。となります。

自分でテーブルに直接データを何か入力すると、
次に追加クエリを実行した際、
1件のデータを追加します。となります。

続いて追加クエリ実行の際には2件、
その次は4件追加と、
テーブルに入っているデータの件数だけ、
そのときにフォームに入力されている情報が、追加されてしまいます。

どのような原因が考えられますでしょうか?
お知恵を貸していただけたらと思います。

情報が不十分でしたらご指摘願います。
補足いたしますので。
それでは、よろしくお願いいたします。

A 回答 (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件づつ追加できると思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/02/09 22:18

重複する訳ですね、了解しました。


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

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

お礼日時:2004/02/09 22:22

>テーブルに入っているデータの件数だけ、


>そのときにフォームに入力されている情報が、追加されてしまいます。

それは追加クエリーが元テーブルを参照している形になっているからではないでしょうか。

 INSERT INTO 履歴テーブル
 SELECT フォーム上のコントロール
>FROM 履歴テーブル

になっていませんか?
だとしたら、このFROM句は必要ありません。

クエリのデザインビューでいうと、
上の表示欄にある「履歴テーブル」を削除すれば良いはずです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/02/09 22:18

日付の形式は、どうなってます?


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

この回答への補足

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

早いご回答どうもありがとうございます。

補足日時:2004/02/08 23:56
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A