総ありがとう数 累計4,308万(2014年11月23日現在)

毎月4,000万人が利用!Q&Aでみんなで助け合い!

-PR-
  • すぐに回答を!
  • 2004-07-06 12:07:22
  • 質問No.916515

解決
済み
Q アクセスのフォームを開くときに新しいレコードへ移動するには?

  • 閲覧数1138
  • ありがとう数9
  • 気になる数0
  • 回答数8
xxxgin

アクセスの入力用のフォームを開くときに、新しいレコードへ移動させて、すぐに入力ができるようにしたいのですが、マクロを使っても「レコードセットの最後のレコードよりも後に移動することはできません」のエラーメッセージが出てしまい、新しい入力ができなくなってしまいました。プロパティの更新の許可、追加の許可、削除の許可はいずれも「はい」にしています。どうすれば新しいレコードの入力ができるのでしょうか?困ってます。
  • 回答数8
  • 気になる数0

Aみんなの回答(全8件)

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

  • 2004-07-09 15:48:07
  • 回答No.8
>確かに担当者Mの担当者CDと得意先Mの送付先CDは主キーになっていませんでした

これは大変です。(ちょっと大げさ)
この二つのテーブルの担当者CDと送付先CDを主キーにしないと、クエリでは新規データを入力することはできません。(主キーは固有(重複のない)のデータを認識するものですから、主キーにしていないと、リレーション(一対多)の関係にならず、クエリにその主キーのないテーブルを入れると他のテーブルとの関係がはっきりしないので、新しいレコードが入力されなくなってしまいます)
今から、主キーにすることはできませんか?もしできないようであれば、その担当者Mと得意先Mはマスターテーブルではないということになってしまいます。(つまり、データが重複しているということです)
もし、主キーにしようとして、主キーにできないのであれば、データに重複があるので、重複しているデータを削除しなければなりません。もし、重複している状態で正しいと思われて作成されているようであれば、すこし、テーブルの作り方を変えなければなりません)

>可変テーブルと得意先Mの「送付先CD」は、どちらも主キーの設定がないために自動結合

この可変するテーブルの方は、入力NOが主キーで間違えはないと思います。通常は、「どちらか一方が主キー」で正しいリレーションが取れますので、この場合の「どちらか(可変するテーブルの送付先CDと得意先Mの送付先CDのどちらかが)主キーになっていればよいかと思います。(担当Mのほうも同じ考え方です)」となると可変するテーブルのほうの送付先CDは主キーには絶対になりませんので(重複してますよね)、得意先Mの送付先CDが主キーにならなければなりません。
いかがですか?主キーにすることができれば、きっとクエリからも入力できますよ。
お礼コメント
ついに解決しました!!\(^o^)/
本当にありがとうございました。終わってみれば、単純な理由でした。主キーの設定だったなんて。。。こんなにお付き合いいただいて感謝、感謝です。
本当にありがとうございました。
投稿日時 - 2004-07-10 18:04:05
  • 同意数0(0-0)
  • ありがとう数0

その他の回答 (全7件)

  • 2004-07-06 17:08:38
  • 回答No.2
そうですか。それであればクエリの問題ですね。
クエリに中に、マスターテーブルのIDとか入っていませんか?具体的に差し支えのない範囲で、そのクエリに使っているテーブルのフィールド名の列記(どのフィールドが主キーになっているかなど)を教えていただければ、すぐに原因はわかると思いますよ。
お礼コメント
ありがとうございます。ほんとに助かります。
まず、元になるマスターテーブルがあります。このマスターには送付先CDがあり、これはオートナンバー型で、主キーの設定をしています。このマスターに得意先Mや担当Mや品目Mなどの各種テーブルとリンクをはるためのクエリーを作成しています。このクエリーが今回問題の入力用フォームのレコードソースになっています。なぜクエリーにしたかと言うと、得意先CDを入力したときに得意先名や住所などを画面上に表示するようにしたいからなのです。こんな説明でわかるでしょうか??
投稿日時 - 2004-07-06 19:30:23
通報する
  • 同意数0(0-0)
  • ありがとう数0
  • 2004-07-06 18:20:23
  • 回答No.3
入力しようとしているレコードの主キーの重複。
リレーションを取っているテーブル内レコードの存否。整合性の崩れ等。
オートナンバー型フィールドの崩れ。
このぐらいの事が原因だと思いますが。
通報する
  • 同意数0(0-0)
  • ありがとう数0
  • 2004-07-06 22:12:11
  • 回答No.4
>得意先Mや担当Mや品目M
これがマスターテーブルですね。
そして、可変するテーブル(日常データを入力していくテーブルですね。)は
>送付先CDがあり、これはオートナンバー型で、主キーの設定をしています
と仰っているテーブルでしょうか?
まず、クエリーやフォームを考える前に、テーブルのことを考えて見ます。
もし、フォームを使わずに直接テーブルにデータを入力するとすると。。。
可変するテーブルに、たとえば。。
no,売上日,得意先ID,商品ID,個数,担当ID
1,2004/7/7,001,002,10,100
などと入力していきますよね。
そして、可変するテーブルの得意先IDにマスターテーブルの得意先Mの得意先IDとリレーションを組むことによって、得意先名や住所などを参照することができます。(クエリーなどで・・)
ということは、そのクエリの中は可変するテーブルが元になっていなければなりません。すなわち、得意先IDは可変するテーブルにもありますが、得意先Mにも得意先IDはありますよね。データを入力してしまっているものをクエリで表示するだけのものであれば、どちらの得意先IDを使っても同じクエリが作成されますが、追加をしていかなければならないクエリは別です。必ず、可変するテーブルの得意先IDを入れておかなければなりません。つまり、入力して追加をしていくわけですから、得意先Mテーブルに追加するのではなく、可変するテーブル側ですよね。クエリを作って、データが追加できないというときは、割とこういうことが多いかと多いかと思います。
で、まとめると、まず
マスターテーブル(ここでは、得意先Mや担当Mや品目M)の各主キーになっているIDがクエリに含まれていませんか?
と、これで解決できなければ、ひとつ確認!
可変するテーブルに直接すべてのマスターテーブルがリレーションされていますか?
それとも、
可変するテーブルに得意先Mテーブルがリレーションされていて、さらに、得意先Mテーブルに担当者Mテーブルがリレーションされているなど・・になっていますか?
お礼コメント
ほんとにありがとうございます。
>必ず、可変するテーブルの得意先IDを入れて
>おかなければなりません。

さっそく調べてみました。これってクエリーのフィールドには可変するテーブル側の項目を追加するってことですよね?同じ得意先IDでも、参照するための得意先Mの得意先IDをフィールドに追加してはならないって
ことですね。う~ん一応間違ってないようです。

>可変するテーブルに直接すべてのマスターテーブル
>がリレーションされていますか?
>それとも、可変するテーブルに得意先Mテーブルが
>リレーションされていて、さらに、得意先Mテーブ
>ルに担当者Mテーブルがリレーションされているな
>ど・・になっていますか?

おっしゃる通りになってます。これが問題なのでしょうか?でも、クエリーで、得意先Mと担当者Mのリレーションを削除しても問題は解決しませんでした。

ほんとに何度もすいませんが、宜しくお願いします。
投稿日時 - 2004-07-07 10:49:52
通報する
  • 同意数0(0-0)
  • ありがとう数0
  • 2004-07-08 16:31:37
  • 回答No.6
お礼読ませていただきました。
読んでいて少々疑問に思ったことがありますので、確認させてください。
>>可変するテーブルに直接すべてのマスターテーブル
>>がリレーションされていますか?
>>それとも、可変するテーブルに得意先Mテーブルが
>>リレーションされていて、さらに、得意先Mテーブ
>>ルに担当者Mテーブルがリレーションされているな
>>ど・・になっていますか?

>おっしゃる通りになってます。
ということでしたが・・これは、どちらになっていますか?わたしは、後者のほうになっているのかと(可変するテーブルに得意先Mテーブルがレーションされていて、さらに、得意先Mテーブルに担当者Mテーブルがリレーションされている)だと思ったのですが、前者のほうでしたか?
もし、後者のほうだとすると・・・先ほどのお礼の部分に疑問が出てきます。

>この2つのテーブルのいずれか1つでも追加すると入力ができなくなります。
この、「いずれか」という言葉に、ひっかかります。
可変するテーブルには、「得意先M」はリレーションされても「担当者M」を単独で入れても、可変するテーブルにはつなげるフィールドがないのではないかと考えます。例えば、担当者IDが可変するテーブルにあり、「得意先M」にも存在するということになっていますか?
と、リレーションをもう一度見てみてください。(リレーションシップウィンドウの方です)
リレーションシップウィンドウでグレーのところで、右クリックして、すべてのリレーションを表示して、すべてを見てください。(おかしなところはないですか?)もし、リレーションシップウィンドウのほうではリレーションの設定をしていないようであれば、その旨教えてください。
と、クエリを作成するときに、先ほど確認していただいた方法で、ひとつずつテーブルを追加して確認していくときに、リレーションは自動結合しましたか?それとも、自分でつなげましたか?その部分を教えてください。
お礼コメント
すいません。間違っていました<(_ _)>
可変するテーブルには
1.得意先M
2.品目M
3.項目M
4.担当者M
が直接リレーションされています。

得意先Mにはさらに、
5.区分M
がリレーションされています。
つまり区分Mは可変するテーブルとは直接は
リレーションされていません。

また、テーブルを追加してゆくときには、品目Mと項目Mは自動結合しましたが、担当者Mと得意先Mは自動結合しませんでした。
担当者Mが自動結合しないのは、可変テーブルでの
フィールド名は入力者CDになっていて、担当者Mの
フィールド名は担当者CDになっているためだと思います。ですので、これは自分で結合しました。得意先Mは「送付先CD」ということで可変テーブルのフィールド名とは同じにしているのに、自動結合しません。
この得意先Mも自分で結合させました。

この自動結合しないフィールド名ですが、
可変テーブルの「送付先CD」と得意先Mの「送付先CD」
可変テーブルの「入力者CD」と担当者Mの「担当者CD」
となります。

可変テーブルの「送付先CD」ですが、フィールドサイズを倍精度浮動小数点型にしています。
これは得意先Mのフィールドサイズと一致しています。
また、「入力者CD」は長整数型にしています。
これも担当者Mのフィールドサイズと一致しています。

ほんとにお手間取らせることになって申し訳ないのですが、どうぞ宜しくお願いします。こんなに親切にご返答いただけるのって初めてです(*^_^*)
投稿日時 - 2004-07-08 17:51:55
通報する
  • 同意数0(0-0)
  • ありがとう数0
  • 2004-07-07 11:07:19
  • 回答No.5
それではっ・・・・。
現在作っているクエリはひとまずおいておいて・・・
新しくクエリを作ってみていただけますか?
まずは・・(ウィザードではなく、デザインビューで作ってみてください)
1.可変するテーブルだけを使って、クエリを作る。(とりあえず、すべてのフィールドを使ってみてください)
2.データーシートビューで確認し、新しいレコードが入力されるか確認してください。(たぶんこれは大丈夫だと思う)
3.デザインビューにし、テーブルの追加で、マスターテーブルをひとつ追加。(得意先Mなど)そして、得意先名や住所など入れてみてください。
4.データーシートビューで確認し、新しいレコードが入力されるか確認してください。

以上の手順で、1つずつ、テーブルを追加する形で、確認をし、どの時点で追加ができなくなるのか、確認してみてください。そして、教えていただければ、対処があると思います。
お礼コメント
さっそくやって見ました。可変するテーブルのみでクエリーを作成した場合は、なにも問題なく入力できました。そこで、おっしゃられるように、クエリーに一つずつテーブルを追加していきましたところ、担当Mを追加したときと得意先Mを追加した時に新しいレコードが入力できなくなりました。この2つのテーブルのいずれか1つでも追加すると入力ができなくなります。その他の項目Mや区分Mは問題ありませんでした。う~んこうやって問題を一つ一つ解いてゆくわけですか。。。すごく勉強になります(^^)
本当にほんとうにありがとうございます。
投稿日時 - 2004-07-07 17:41:34
通報する
  • 同意数0(0-0)
  • ありがとう数0
7件中 1~5件目を表示
  • 回答数8
  • 気になる数0
  • ありがとう数2
  • ありがとう
  • なるほど、役に立ったなど
    感じた思いを「ありがとう」で
    伝えてください

関連するQ&A

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

別のキーワードで再検索する

あなたの悩みをみんなに解決してもらいましょう

  • 質問する
  • 知りたいこと、悩んでいることを
    投稿してみましょう
-PR-
-PR-
-PR-

特集

専門医・味村先生からのアドバイスは必見です!

関連するQ&A

-PR-

ピックアップ

  • easy daisy部屋探し・家選びのヒントがいっぱい!

-PR-
ページ先頭へ