プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (8件)

>確かに担当者Mの担当者CDと得意先Mの送付先CDは主キーになっていませんでした



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

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

この可変するテーブルの方は、入力NOが主キーで間違えはないと思います。通常は、「どちらか一方が主キー」で正しいリレーションが取れますので、この場合の「どちらか(可変するテーブルの送付先CDと得意先Mの送付先CDのどちらかが)主キーになっていればよいかと思います。(担当Mのほうも同じ考え方です)」となると可変するテーブルのほうの送付先CDは主キーには絶対になりませんので(重複してますよね)、得意先Mの送付先CDが主キーにならなければなりません。
いかがですか?主キーにすることができれば、きっとクエリからも入力できますよ。
    • good
    • 0
この回答へのお礼

ついに解決しました!!\(^o^)/
本当にありがとうございました。終わってみれば、単純な理由でした。主キーの設定だったなんて。。。こんなにお付き合いいただいて感謝、感謝です。
本当にありがとうございました。

お礼日時:2004/07/10 18:04

それでは・・


>得意先Mは「送付先CD」ということで可変テーブルのフィールド名とは同じにしているのに、自動結合しません。

これに注目!
ご存知かもしれませんが、自動結合するのにはいくつかの条件があります。
1.同じフィール名
2.同じデータ型
3.どちらかまたは両方が主キー

となると・・・1と2は確認済みですから・・主キーはどうですか?「得意先M」の送付先CDは主キーになっていますか?
と、担当者のほうはフィールド名が違うので、自動結合されないとしても、「担当者M」の担当者CDは主キーになっていますか?

あまり頻繁には見れませんが、とことん付き合いますよぉー
    • good
    • 0
この回答へのお礼

>あまり頻繁には見れませんが、とことん付き合いますよぉー

再三ほんとにありがとうございます。
なんかすごく心強いです!(^^)!
不思議と、とてもハッピーな気分になってます。

さて、恥ずかしながら
3.どちらかまたは両方が主キー
は知りませんでした。

さっそく調べてみると、確かに担当者Mの担当者CD
と得意先Mの送付先CDは主キーになっていませんでした。以前の私の記述に間違いがあったんですが、可変テーブルの主キーは「入力NO」でした。したがって、可変テーブルと得意先Mの「送付先CD」は、どちらも主キーの設定がないために自動結合しないようです。

お礼日時:2004/07/09 09:24

お礼読ませていただきました。


読んでいて少々疑問に思ったことがありますので、確認させてください。
>>可変するテーブルに直接すべてのマスターテーブル
>>がリレーションされていますか?
>>それとも、可変するテーブルに得意先Mテーブルが
>>リレーションされていて、さらに、得意先Mテーブ
>>ルに担当者Mテーブルがリレーションされているな
>>ど・・になっていますか?

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

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

すいません。間違っていました<(_ _)>
可変するテーブルには
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

それではっ・・・・。


現在作っているクエリはひとまずおいておいて・・・
新しくクエリを作ってみていただけますか?
まずは・・(ウィザードではなく、デザインビューで作ってみてください)
1.可変するテーブルだけを使って、クエリを作る。(とりあえず、すべてのフィールドを使ってみてください)
2.データーシートビューで確認し、新しいレコードが入力されるか確認してください。(たぶんこれは大丈夫だと思う)
3.デザインビューにし、テーブルの追加で、マスターテーブルをひとつ追加。(得意先Mなど)そして、得意先名や住所など入れてみてください。
4.データーシートビューで確認し、新しいレコードが入力されるか確認してください。

以上の手順で、1つずつ、テーブルを追加する形で、確認をし、どの時点で追加ができなくなるのか、確認してみてください。そして、教えていただければ、対処があると思います。
    • good
    • 0
この回答へのお礼

さっそくやって見ました。可変するテーブルのみでクエリーを作成した場合は、なにも問題なく入力できました。そこで、おっしゃられるように、クエリーに一つずつテーブルを追加していきましたところ、担当Mを追加したときと得意先Mを追加した時に新しいレコードが入力できなくなりました。この2つのテーブルのいずれか1つでも追加すると入力ができなくなります。その他の項目Mや区分Mは問題ありませんでした。う~んこうやって問題を一つ一つ解いてゆくわけですか。。。すごく勉強になります(^^)
本当にほんとうにありがとうございます。

お礼日時:2004/07/07 17:41

>得意先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テーブルがリレーションされているなど・・になっていますか?
    • good
    • 0
この回答へのお礼

ほんとにありがとうございます。
>必ず、可変するテーブルの得意先IDを入れて
>おかなければなりません。

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

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

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

ほんとに何度もすいませんが、宜しくお願いします。

お礼日時:2004/07/07 10:49

入力しようとしているレコードの主キーの重複。


リレーションを取っているテーブル内レコードの存否。整合性の崩れ等。
オートナンバー型フィールドの崩れ。
このぐらいの事が原因だと思いますが。
    • good
    • 0

そうですか。

それであればクエリの問題ですね。
クエリに中に、マスターテーブルのIDとか入っていませんか?具体的に差し支えのない範囲で、そのクエリに使っているテーブルのフィールド名の列記(どのフィールドが主キーになっているかなど)を教えていただければ、すぐに原因はわかると思いますよ。
    • good
    • 0
この回答へのお礼

ありがとうございます。ほんとに助かります。
まず、元になるマスターテーブルがあります。このマスターには送付先CDがあり、これはオートナンバー型で、主キーの設定をしています。このマスターに得意先Mや担当Mや品目Mなどの各種テーブルとリンクをはるためのクエリーを作成しています。このクエリーが今回問題の入力用フォームのレコードソースになっています。なぜクエリーにしたかと言うと、得意先CDを入力したときに得意先名や住所などを画面上に表示するようにしたいからなのです。こんな説明でわかるでしょうか??

お礼日時:2004/07/06 19:30

1.オブジェクトの中から「マクロ」をクリック


2.「新規作成」ボタンをクリック
3.アクションの中から「レコードの移動」をクリック
4.アクションの引数(画面下)に
 オブジェクトの種類 フォーム
 オブジェクトの名前 フォームの名前
 レコード  新しいレコード
5.何か名前をつけてマクロを保存
6.フォームを開く
7.フォームのプロパティの「イベント」タブをクリック
8.開く時 に先ほど保存したマクロ名を選択  
    • good
    • 0
この回答へのお礼

早速のご返答ありがとうございます。でも教えて頂いたマクロはすでに試したのですがダメでした。フォームのプロパティのレコードソースにクエリーを使っているのですが、これがどうも問題のような気がしてます。単純にテーブルを選んだ場合は問題はないのです。

お礼日時:2004/07/06 15:18

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

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


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