• ベストアンサー

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

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

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

  • ベストアンサー
  • omusupa
  • ベストアンサー率61% (115/186)
回答No.8

>確かに担当者Mの担当者CDと得意先Mの送付先CDは主キーになっていませんでした これは大変です。(ちょっと大げさ) この二つのテーブルの担当者CDと送付先CDを主キーにしないと、クエリでは新規データを入力することはできません。(主キーは固有(重複のない)のデータを認識するものですから、主キーにしていないと、リレーション(一対多)の関係にならず、クエリにその主キーのないテーブルを入れると他のテーブルとの関係がはっきりしないので、新しいレコードが入力されなくなってしまいます) 今から、主キーにすることはできませんか?もしできないようであれば、その担当者Mと得意先Mはマスターテーブルではないということになってしまいます。(つまり、データが重複しているということです) もし、主キーにしようとして、主キーにできないのであれば、データに重複があるので、重複しているデータを削除しなければなりません。もし、重複している状態で正しいと思われて作成されているようであれば、すこし、テーブルの作り方を変えなければなりません) >可変テーブルと得意先Mの「送付先CD」は、どちらも主キーの設定がないために自動結合 この可変するテーブルの方は、入力NOが主キーで間違えはないと思います。通常は、「どちらか一方が主キー」で正しいリレーションが取れますので、この場合の「どちらか(可変するテーブルの送付先CDと得意先Mの送付先CDのどちらかが)主キーになっていればよいかと思います。(担当Mのほうも同じ考え方です)」となると可変するテーブルのほうの送付先CDは主キーには絶対になりませんので(重複してますよね)、得意先Mの送付先CDが主キーにならなければなりません。 いかがですか?主キーにすることができれば、きっとクエリからも入力できますよ。

xxxgin
質問者

お礼

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

その他の回答 (7)

  • omusupa
  • ベストアンサー率61% (115/186)
回答No.7

それでは・・ >得意先Mは「送付先CD」ということで可変テーブルのフィールド名とは同じにしているのに、自動結合しません。 これに注目! ご存知かもしれませんが、自動結合するのにはいくつかの条件があります。 1.同じフィール名 2.同じデータ型 3.どちらかまたは両方が主キー となると・・・1と2は確認済みですから・・主キーはどうですか?「得意先M」の送付先CDは主キーになっていますか? と、担当者のほうはフィールド名が違うので、自動結合されないとしても、「担当者M」の担当者CDは主キーになっていますか? あまり頻繁には見れませんが、とことん付き合いますよぉー

xxxgin
質問者

お礼

>あまり頻繁には見れませんが、とことん付き合いますよぉー 再三ほんとにありがとうございます。 なんかすごく心強いです!(^^)! 不思議と、とてもハッピーな気分になってます。 さて、恥ずかしながら 3.どちらかまたは両方が主キー は知りませんでした。 さっそく調べてみると、確かに担当者Mの担当者CD と得意先Mの送付先CDは主キーになっていませんでした。以前の私の記述に間違いがあったんですが、可変テーブルの主キーは「入力NO」でした。したがって、可変テーブルと得意先Mの「送付先CD」は、どちらも主キーの設定がないために自動結合しないようです。

  • omusupa
  • ベストアンサー率61% (115/186)
回答No.6

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

xxxgin
質問者

お礼

すいません。間違っていました<(_ _)> 可変するテーブルには 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のフィールドサイズと一致しています。 ほんとにお手間取らせることになって申し訳ないのですが、どうぞ宜しくお願いします。こんなに親切にご返答いただけるのって初めてです(*^_^*)

  • omusupa
  • ベストアンサー率61% (115/186)
回答No.5

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

xxxgin
質問者

お礼

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

  • omusupa
  • ベストアンサー率61% (115/186)
回答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テーブルがリレーションされているなど・・になっていますか?

xxxgin
質問者

お礼

ほんとにありがとうございます。 >必ず、可変するテーブルの得意先IDを入れて >おかなければなりません。 さっそく調べてみました。これってクエリーのフィールドには可変するテーブル側の項目を追加するってことですよね?同じ得意先IDでも、参照するための得意先Mの得意先IDをフィールドに追加してはならないって ことですね。う~ん一応間違ってないようです。 >可変するテーブルに直接すべてのマスターテーブル >がリレーションされていますか? >それとも、可変するテーブルに得意先Mテーブルが >リレーションされていて、さらに、得意先Mテーブ >ルに担当者Mテーブルがリレーションされているな >ど・・になっていますか? おっしゃる通りになってます。これが問題なのでしょうか?でも、クエリーで、得意先Mと担当者Mのリレーションを削除しても問題は解決しませんでした。 ほんとに何度もすいませんが、宜しくお願いします。

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.3

入力しようとしているレコードの主キーの重複。 リレーションを取っているテーブル内レコードの存否。整合性の崩れ等。 オートナンバー型フィールドの崩れ。 このぐらいの事が原因だと思いますが。

  • omusupa
  • ベストアンサー率61% (115/186)
回答No.2

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

xxxgin
質問者

お礼

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

  • omusupa
  • ベストアンサー率61% (115/186)
回答No.1

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

xxxgin
質問者

お礼

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

関連するQ&A

  • アクセス2000のフォームでレコードの移動が出来ない。

    アクセス2000を使っています。 フォームで入力を途中までして終了し、後でフォームを開いて前のレコードに移動しようとしても移動できません。 新しいレコードの追加も出来ません。 どうしたらよいでしょうか。

  • アクセス2000のフォームについて

    アクセスでまたつまずいてしまいました。ちょっと教えてください。 複数のテーブルから選択クエリを作り、それを基にオートフォームでフォームを作ったのですが、フォームでデータの入力が出来ません。クエリでもデータの入力が出来ません。 「このレコードセットは更新できません」と下のほうに出ます。 フォームのプロパティのデータの更新の許可と、データ入力用のところは“はい”になっています。 私では原因がわかりません。わかりにくい質問でしょうが、どなたかご指導お願いします。

  • アクセス スナップショットについて

    フォームのプロパティの 更新の許可→いいえ 削除の許可→いいえ 追加の許可→いいえ とするのと レコート゛セット→スナップショット にするのは全く同じ意味でしょうか?

  • Accessでレコードの保存をせずにフォームを閉じたい

    Accessでデータベースのレコード追加を行うフォームを作成しています。 コマンドボタン(1)をクリック→新しいレコードの追加 コマンドボタン(2)をクリック→フォームを閉じる としています。(ウィザードを使用して、埋め込みマクロ?を設定しています。) コマンドボタン(1)でレコードが追加されるのは問題ないのですが、 コマンドボタン(2)をクリックした場合も、レコードが追加されていることに気がつきました。 一般的に入力する人は、 データを追加しようと思って入力していたけれど、 途中でやめてフォームを閉じることってありますよね? そういう場合にレコードが追加されてしまったら問題だと思ったのです。 ですが、どうしたらレコードの追加をせずにフォームを閉じられるかがわかりません。 それって可能でしょうか? Access初心者です。難しいVBAとかはまだよくわかりません。 何か方法、アドバイス等ありましたら よろしくお願いします。

  • ACCESS2000のメインフォームサブフォーム間の移動

    Access2000でメインフォームの中に詳細を確認/入力するためのサブフォームを作成しています。 メインフォームの中のコントロールを最後まで入力(enterで移動)していくと、メインフォームの最後のコントロールの次はサブフォームの最初のコントロールに移動します。(これは普通ですよね?) サブフォームはデータの詳細によっては1レコードで終わるものもありますし、複数レコードにわたるものもあります。 サブフォームの入力が終了したときに、キー操作でメインフォームの次のレコードの頭のコントロールに移動する事はできますか? マクロをAccessの方から設定するくらいならできるのですが、自分でSQLをうんぬんする知識はありません。 よい方法があったら教えてください。

  • アクセス レコードセットを更新できません

    アクセスは初心者ですが、会社で少しずつ勉強しながら、会社のアクセスのシステムを管理しています。 先日から、突然既存のアクセスのシステムで、フォームを入力しテーブルに追加しようとすると「レコードセットを更新できません」とメッセージが出てきて、データを更新できなくなってしまっています。 特にアクセスを変更したりしていないのですが、突然なってしまいました。 今まで問題なく動いていたので、なぜそういったメッセージが出るのか分からず、困っています。 どういった対策をしたらよいでしょうか。 ご助言をお願いいたします。

  • アクセス・別フォームの新規レコードへの移動

    こんにちは アクセス2000で フォームAでフォームBの入力をしています。 新規登録ボタンを押すと フォームBを保存し フォームBの新規レコードに移動したいのですが どうすればいいのかわかりません。 どなたかお力をお貸しください。。 。

  • フォームに配したレコード移動ボタンの操作改善

    フォームに配したレコード移動ボタンの操作を改善したいと思っています。アドバイスを宜しくお願い致します。 [改善したいこと] 「次へ」のコマンドボタンをクリックしていくと、最後のページで止まらずに無地のページでストップします。現在の設定を変更しないで、最後のページで止まる様にできればと思っていますが、どんな方法があるのか、設定変更無し・設定変更有りを含め教えて頂けませんでしょうか。 [改善対象オブジェクト] 1,オブジェクトはフォームで、名前は「保険契約管理入力フォーム」です。 2,フォームに4つのコマンドボタンを配し「前へ」「次へ」「先頭の・・」「最   後の・・」に対し各々へページ移動できる様にしています。 3,フォームはデータ入力「データ入力用の設定は(いいえ)」用としても使って   いますので、フォームを開く際に最後のページではなく、次の無地のページに   なる様に設定しています。 4,2つの移動ボタン(前の・・と次の・・)のイベンドの設定内容。 ・1行目のマクロ設定:アクション「エラー時」、引数「次へ」 ・2行目のマクロ設定:アクション「レコードの移動」、引数「各々の移動先」 ・3行目のマクロ設定:アクション「メッセージボックス」、条件「[MacroError]   <>0」、引数「=[MacroError].[Description]」 5,2つの移動ボタン(先頭の・・と最後の・・)のイベンドの設定内容。 ・1行目のマクロ設定:アクション「レコードの移動」、引数「先頭の・・、最後   の・・」 以上ですが、宜しくお願いします。

  • ACCESS2000のフォームについて

    フォーム(←単票形式の)のデザインビューで、ツールボックスから、コマンドボタンウィザードを使い、コマンドボタンを作りましたが、ウィザードの最後のボタン名を指定するところで、漢字変換ができず、困っています。 いつもひらがなにしか入力が出来ないのですが、ここで直接漢字入力にするにはどういう処置をすればいいですか。 それから、追加の質問ですが、 作ったコマンドボタン(←レコード削除用)で、レコードを削除しようとしたところ、「リレーションシップが設定されたレコードが、テーブルにあるため、レコードの削除や変更を行えません。」と、エラーメッセージが表示されます。 レコードをフォームから削除するにはどうすればいいですか。 (※無理にしたいわけではないが、そういう命令も勉強の一環でして見たいのです。) 宜しくお願いします。

  • Accessのフォームから削除したレコードをテーブルに保存したい

    Accessを利用してフォームからデータを入力しているのですが、クエリを使わずフォーム画面から不必要なレコードをコマンドボタンで削除しています。削除したレコードをテーブルに保存したいのですが、追加クエリで条件を決めずにフォームの画面から判断したレコードだけを削除し、かつ削除したレコードを削除専用のテーブルに追加する方法を教えてください。よろしくお願いします。

専門家に質問してみよう