• ベストアンサー

Accessでエラー

先日にもお伺いした内容ですが、マスターテーブルとサブテーブルをリレーションで組んでいて、メインフォーム内で一つのフィールドにサブテーブルを元にコンボボックスで表示させるようにしているのですが、そのフィールドがNULLか""の状態で終了しようとすると、エラー表示がでます。こういう場合はメインフォーム内で常にこのフィールドに入力しないといけないものなのでしょうか? また、自己流ですべて作成しているので、何か作成の仕方がおかしいのでしょうか。このことは、特定のフォームだけでなく、数種のフォームで同じ現象がでています。

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

  • ベストアンサー
  • matyap
  • ベストアンサー率56% (9/16)
回答No.3

こんにちは。 お力になれなかったようで、すみません。 今回例をあげていただいた場合を考えると、リレーションシップの設定は必ずしも必要ではないように思います。 リレーションシップは、親レコードを削除したら、同時に子レコードも削除することを可能とする場合などに有効ですよね。 でもこの場合は、「車種」を簡単に選ぶために車種をテーブル化しコードとして利用するのでリレーションの必要があるのかな・・・とも思います。 私が今まで作成してきたシステムではリレーションシップは利用しなかったので詳しくはわからないのですが・・・。リレーションシップをとりあえず外してみてはどうでしょうか。(根本的な解決にはなってないですよねぇ・・・逃げてますぅ) 出力画面ではメインテーブルとサブテーブルとをリンクしたクエリーを用いて車種名を出力するなどで対応できます。 混乱させるだけで、お力になれているとは思えませんね。スミマセン。 他の方からの回答があればそちらを信用なさってくださいね。 自宅にはACCESSがないので、土日は試してみることもできなくって・・・。 最後まで付き合いますので、頑張りましょう!

nkeis
質問者

補足

温かいお言葉ありがとうございます。 一度リレーションが必要でなさそうなところは、削除してみます。 そうした場合、出力のときクエリーを利用してリンクしたときは、リンク先の車種の抽出条件にメインフォームの車種を見に行くように設定すればいいのですか?たとえば、抽出条件にforms!メインフォーム名!コントロール名なんかのように! 私の中ではテーブル同士で関連するようなものはすべてリレーションが必要だと考えていました。 もし差し支えなければ私が作成したDBを一度確認していただいてアドバイスしていただければありがたいのですが。 私の周りには経験者がいなく、私自身も作成するのがはじめてなもので、本当にゴールに向かって進んでいるのかと、かなり無駄な作業をしすぎているのではと心配になります。もしだめな場合は、今の私を助けていただけるような人(あくまで個人で費用負担ができないのを承知の方)はいらっしゃらないでしょうか? 修正していただくと言うものではなく、欠点、修正点のコメント、アドバイスがほしいのですが。ご連絡お待ちしております。

その他の回答 (3)

  • matyap
  • ベストアンサー率56% (9/16)
回答No.4

こんにちは。 出力の際は、書いてらっしゃるような対応で可能だと思います。 作成中のものを私が見て差し支えないのであれば、見てみますので送っていただけますか?見てみるのは、月曜日になってしまいますが・・・ gooのフリーメールに添付できる容量であれば(制限はどれくらいなのかなぁ・・・)送ってください。不可能であれば、その旨を連絡ください。メールアドレスを返信いたします。 gooのフリーメールは、ニックネーム@mail.goo.ne.jpでいいんですよね。 お待ちしています。

  • matyap
  • ベストアンサー率56% (9/16)
回答No.2

こんにちは。 やりたいことがよくわかりました。おっしゃるとおりですね。 この場合最後にチェックすることが望ましいと思います。 リレーションシップでメインテーブルとサブテーブルのリンクを1対多(無限マーク)になっているかと思います。そのリレーションを選択し、右クリックして「リレーションの編集」を選択するか、リレーションをダブルクリックするとリレーションの編集ができます。その画面の「結合の種類」ボタンを押してください。 そこで「Aテーブルの全レコードとBテーブルの同じ結合のフィールドだけを含める。」を選択してみてください。 こうすれば、Aテーブルの全てとBテーブルはリンクが可能なもののみ・・・というふうな設定になります。 これで対処できるといいのですが・・・ これでもダメならまた知らせてください。

nkeis
質問者

補足

せっかくアドバイスいただいたのですが、やっぱりうまくいきません。 さっき気が付いたのですが、たとえば、メインフォーム内のあるフィールドにある コンボボックスで、ただ選択するだけのものでも同じような現象になります。 EX. サブテーブルに車の車種を登録しておきます。    メインフォームからコンボボックスでこのサブテーブル内のレコードを表示する。 このとき出力するために、メインテーブルとサブテーブルを多対1のリレーションを組んでいます。 こうしたばあい、車の仕様を登録するようなメインフォーム内で、この車種を入力するコンボボックスを入力しないでレコードの移動あるいは終了をすると同様なエラー表示がでます。 このようなばあい、根本的な考え方が間違っているのでしょうか。リレーションの設定をこのような場合に行うこと自体が間違っているのでしょうか? なにせ、ビギナーのため怖いもの知らずのため、よろしくご教示ください。

  • matyap
  • ベストアンサー率56% (9/16)
回答No.1

おはようございます。 前の質問も参照させていただきました。 どのようなシステムを作っているのかわからないのですが、以下の例をあげて説明をさせてください。 請求書 (請求番号をキーとし顧客コードや請求番号・請求日を含む) 請求明細(請求番号と枝番をキーとし、商品コード、数量等を含む) 顧客情報(顧客コードをキーとする顧客情報) 商品  (商品コードをキーとし、単価を含む) この場合以下の関係が生まれます。 1請求書に対しては、顧客は1 1顧客に対しては、請求書はn 1請求書に対しては、請求明細はn 1請求明細に対しては、商品は1 質問の内容を読むと、以下のように思われます。 ・請求書作成画面に顧客情報が表示される顧客コードコンボボックスを作成している。 ・顧客コードを選択(入力)せず請求書を作成しようとしている (私の挙げた例が悪いかも知れないのですが・・・。) リレーションをどのように設定しているかにもよりますが、例では顧客のいない請求書は作成されるべきではないはずです。 リレーション・テーブルのキーの状態から上記のような現象が起こっているのではないかと思われます。 他の方からの回答を優先してくださって結構ですが、私の例での勘違い等あれば、補足してくだされば嬉しいです。前のご質問を読んでもイメージがわかないので、どのようなシステムを作成されているのか明かすことはできないとは思いますが、具体的に例を挙げてくだされば、お力になれると思います。

nkeis
質問者

補足

ご回答ありがとうございます。 わかりやすい例を挙げていただいてすいません。 おおむね、例でいわれているとおり、本来顧客コード(私の場合は施設コード)を全ての入力者がいれるべきものなのですが、ネットワークで使用したいと思っているため、どのような入力をされるかわかりません。そこで、シュミレーションをして、このコードを入力せずに終了しようとしたときにこのエラー表示が出たわけです。よって、入力必須項目を入力せずに終了した場合、このエラー表示が出る前に入力を促すメッセージが出せればと思っています。エラー表示がいきなりでると、壊れていると思われるみたいで。。。 このフォームには、終了、メインへ、他のフォームへなどのコマンドボタンを作成していますので、各イベント時に入力を確認し、入力されていない場合は入力を促すようにしたいと思います。 ビギナーのため、具体的にどうしたいと書くことが難しいのですが、よろしくご教示のほどお願いいたします。

関連するQ&A