• 締切済み

ACCESSのリレーションシップであこる不具合について

時たま、20人位の受講生を相手にAccessを教えているのですが、 20人に一人か二人くらいの割合で以下のことが起きます。 テーブルが片手で数えられるくらいの数しかないテーブルを リレーションシップで参照整合性のチェックボックスをつけておいて、 しばらく、クエリの話をしたあと改めてリレーションシップを 表示すると、 ・ものすごい数のリレーションシップが組まれている。 ・そのリレーションシップは何回デリートで削除して上書き保存し、 表示しなおしてもものすごい数のリレーションシップが 相変わらず表示される。 ・クエリで何らかの作業をしていても特に支障はない。 具体的なサンプルはあるので理由を教えていただける方 いらっしゃいましたらどうぞご連絡ください。 メールで送ります。  私がどんなにACCESSをいじくり倒しても、 絶対出てこないのですが、ときたまこういう現象を 出してくれる人がいるのでその度その度なやんでいます。 この現象が起きると、あきらめてMDBを削除してもらうか、 そのままあきらめて使用してもらっています。 どうしても原因が知りたいです。

  • jmong
  • お礼率33% (1/3)

みんなの回答

noname#1296
noname#1296
回答No.2

確かに、とてつもないリレーションになってしまってますね(^^;; ひょっとしたら・・・あの悪名高き「名前の自動修正情報をトラックする」にチェックついていませんか? SR-1でこの辺りのバグは修正されている筈なんですが、フィールド名が日本語の時に変な動作を起こす事が多いです。このチェックを外してやってみて下さい。

jmong
質問者

お礼

返事遅れてごめんなさい。 確認したら付いていましたが、 ”あの悪名高き「名前の自動修正情報をトラックする」” について私はまったく気にしていませんでした。 勉強不足です。 こやつはどのような悪名高き暴挙をおこすのか 非常に興味があります。 とりあえず、その悪名高きものをはずして 今後の講習会をやってみようかと思います。 とりあえずこの質問についてはgoo事務局から 締め切れ!!と催促きちゃったので 締め切ります。 CHOROLYN様。ありがとうございました。 また不具合でたら投稿します

noname#1296
noname#1296
回答No.1

Accessとは長年の付き合いですが、初めて聞く症状ですね。SRまたはSPは適用されているでしょうか? もしこの症状が出た場合、新規にMDBを作成し、そちらにリレーションなしでテーブルをインポートして、新しいMDB側で、リレーションを設定し直してみてはどうでしょうか?

jmong
質問者

補足

早速のお返事ありがとうございました。 以下のアドレスにサンプルを置いておきますので、 よろしければごらんいただければと思います。 http://203.174.72.111/jmong/access.html 別MDBでインポートというお話ですが。 実はその類の方法でいままでごまかしていました(笑)。 今回はできれば、そういった解決策ではなく、 根本的な理由から攻めたかったため投稿させていただきました。 よければ上のアドレスのものをごらんいただけますと ありがたき幸せ(;_;)涙

関連するQ&A

  • アクセスのリレーションシップとクエリ

    私は、アクセスの初心者です。なので、難しいことはよく分からないのですが、アクセスではある1つのフィールドをキーにしてくっつけたりすることができるじゃないですか?そのキーを設定したりするのはリレーションシップでも、クエリでも同じような感じで行うと思うのですが、その2つの違いはクエリはそれをテーブルとして表示できるのに対して、リレーションシップはただ定義するしかできずテーブルとして表示はできないのでしょうか? あと、クエリとかである条件で抽出したテーブルの1つのフィールドのSUMを出したいのですがどういった条件式を書けばいいのでしょうか? なにぶん、初心者ゆえに質問が分かりにくいと思いますが、どうかよろしくお願いします。

  • マイクロソフト アクセス リレーションシップの扱い方について

    よろしくお願いします。アクセスで作成したテーブル、例えばAとBには共通の番号があります。それぞれは各テーブル内で番号がいくつか重複しています。この番号により、リレーションシップの関連付け(参照整合性は行わず)を行った後、クエリで抽出したところ、ところどころ同じデータが発生して、膨大な量になってしまいます。参照整合性・フィールドの連鎖更新・レコードの連座削除をチェックして再度リレーションシップを作成しましたが、主テーブルで参照されている固有のインデックスが見つからないとのエラーメッセージが出ます。このテーブルA・Bを使用してデータが重複しないようにクエリで抽出する事はできますか。

  • MS ACCESSにおいてのリレーションシップ設定

    ACCESSを使用してシステムを構築しているのですが、テーブル間のリレーションシップについて疑問があります。 リレーションシップを設定することにより、データベースの整合性を得ることができますが、その他のメリットはあるのでしょうか? ある文献では検索時間の短縮になるとあったのですが、本当なのでしょうか? 通常の表結合クエリーと参照整合性以外の違いはどのようなものでしょうか? 回答をお願いします。

  • Accessのリレーションシップウインドウに奇妙な現象が・・助けてください(TT)

    「依頼2テーブル」と「担当者テーブル」という2つのテーブルを作っています。「依頼テーブル2」の名前に2があるのはあまり意味はありません。 「担当者テーブル」の「担当者No.」フィールドを主キーにし「依頼テーブル2」にも「担当者No.」を作成しリレーションを貼ろうとしているのですが、奇妙なことになってまして・・・・ 現象1 「ツール」→「リレーションシップ」でリレーションシップウインドウを開くとテーブル名が表示されますが、「担当者テーブル」と「依頼テーブル2_1」と表示される。 現象2 現象1をなんとなく気持ち悪がりながらも「担当者No.」を結合フィールドとしてリレーションを貼り、参照整合性も設定するとエラーもなく設定でき「担当者テーブル」が親、「依頼テーブル2_1」が子であることを示す線がちゃんと表示される。 現象3 現象2もかなり気持ち悪いと思いながらも、「上書き保存」をするが、再度リレーショナルシップウインドウを表示するとリレーションシップが解除されている。(結合を示す線が消えている) 現象4 もう、オカルトな気分満点な状態のままリレーションシップウインドウで右クリックし「全てのリレーションシップを表示」を選択すると「担当者テーブル1」~「担当者テーブル10」と「依頼テーブル2」が表示され、「担当者テーブル」、「担当者テーブル1」~「担当者テーブル10」の11個のテーブルと「依頼テーブル2」が「担当者NO.」を結合フィールドにして全てリレーションシップが貼られている 以上のような状態になっています。作成したテーブルは2つだけなのにこんなことが起こるんでしょうか? また、自宅PCと会社のPCで同じファイルを操作していますが、現象は変りません・・・・ ご存知の方・・・助けてください~!!!

  • ACCESSのリレーションシップについての疑問

    ACCESS初心者です。 ACCESS2002 OSはWindowsXP SP2です。 基本が分かっていないせいなのかもしれませんが、私には理解できない現象が起こっています。対応方法があれば教えていただくようお願いします。 ACCESSでデータ更新のフォームを作っています。 そのフォームは2・3日前に作ったもので、たとえばテーブルAを更新するためにマスターテーブルのBとCを参照しているような形になっています。このリレーションはクエリで指定してあります。 このフォームではクエリに対して更新する形になっています。 このフォームのデザインを編集しているときに「ツール」の「リレーションシップ」をクリックすると画面にはBとCだけが表示されます。 なぜメインのテーブルのAが表示されないのか?と思いながら、しょうがないので右クリックして「すべてのリレーションシップの表示」を押すと、驚いたことにDのテーブルが表示されました。 実はこのDというテーブルは以前に作ったAを作る前に使っていたAによく似たテーブルなのです。 当然、以前にはDとB・Cのリレーションも作っていましたが、今編集中のフォームではDは関係ありません。 リレーションシップの画面は不必要に広大なもので横に3スクロール分と縦にも5スクロール分くらいあって、その右下の端っこにD・B・Cのリレーションだけが表示されていて、それ以外はただただスペースがあるだけです。 なぜ肝心のA・B・Cのリレーションが表示されずD・B・Cのリレーションが表示されるのでしょう? 試しに今では不要であるDのテーブルを削除してみましたがリレーションシップではさすがにDは消えたもののB・Cが表示されるだけで、Aは出てきません。 そもそもACCESSにおけるリレーションシップというのは個々のフォーム内で定義されるものではないのですね?(根本的なことで申し訳ないのですが、買った2冊の本を見てもインターネットで探してもその辺の説明が見当たりませんでした) SQLであれば個々のSQL文で都度JOIN等の記述をすると思うのですが、ACCESSではデータベース全体の共通事項(?)としての定義になるのでしょうか? ACCESSは初心者で見当はずれな質問かもしれませんがどうかよろしくお願いします。

  • Access(リレーションシップについて) 

     Win XP Office 2003 Accessを勉強中です。  デザインビューでクエリを作成するときに、関連するテーブルを表示させると自動的に「結合プロパティ」の線が表示されますが、 この表示で自動的に「1対多」を表示する時としない時がありますが、これは何故でしょうか。  これはどこかから設定をしてやるのでしょうか。  また、同じような線としてメニュバーから「リレーションシップ」を表示させることが出来ますが、 内容的には「結合プロパティ」と同じものですが、これは「リレーションシップ」とはどのようなに使い分けるものでしょうか。

  • Accessリレーションシップについて

    お世話になります。 Access2010 普段はクエリにて、いくつかのテーブルやクエリを紐づけているのですが リレーションシップの設定は今までやったことがありません。 ネットで調べて、 ・「参照整合性」にチェックを入れることにより、1対多の多側で1側に存在  しないIDで登録しようとするとエラーになる。   →間違ったデータが入力されるのを防ぐ。 ・多側でリレーションシップが設定されているフィールドに値を入力しない  ことは可能。但し、当該フィールドの「値要求」プロパティを"はい"に  した場合は、入力しないとエラーになる。 ・「フィールドの連鎖更新」にチェックを入れると、1側で変更したものが  多側でも自動的に変更される。 ・「レコードの連鎖削除」にチェックを入れると、1側で削除した場合、  多側で該当するデータをもつレコードが自動的に削除される。 上記については実際に試してみて動きを確認しました。 ※上記の認識違いや、もっと大事なことがあればご指摘、ご教示頂けると  幸いです。 今までは、こっちのテーブルで削除したらこっちのテーブルでも削除 みたいなことをやってたので、便利だとは思うのですが。。 以下のテーブルでリレーションシップの設定を行ったとします。 売上テーブル  ID 商品 担当者コード  1 AAAAA  3  2 BBBBB  1  3 AAAAA  1  4 CCCCC  2  5 CCCCC  3 担当者テーブル 担当者コード 担当者名  1     担当者A  2     担当者B  3     担当者C 売上テーブルの担当者コードと、担当者テーブルの 担当者コードでリレーションの設定を行い、「参照整合性」及び 「レコードの連鎖削除」にチェックを入れたとします。 例えばフォーム上にリストボックスを設置し ID 商品 担当者名 を表示し、リストボックス上で選択されたレコードを、削除ボタンを 押したら、そのレコードが削除されるプログラムを作成します。 ※選択されたレコードのIDを取得し削除クエリで削除。 リストボックスでID:5のレコードを選択し、削除ボタンを押した場合 売上テーブルのID:5のレコードを削除しても、担当者テーブルから 担当者コード:3のレコードは削除されない・・という認識でよろしい でしょうか。 ※要するに、1対多の多側で削除されても1側には影響無し。 同様にリストボックスでID:5のレコードを選択し、削除ボタンを押したときに 担当者コード:3を取得し、まずは担当者テーブルで担当者コード:3の レコードを削除すると、併せて売上テーブルのID:1及びID:5が削除 される。 要するに、上記のケースで「レコードの連鎖削除」の設定を行うと 本来削除すべきID:5以外のレコード(ID:1)まで削除されてしまう ことになる?? ※そもそも例がちょっと悪かったかもしれません。。 何が言いたいかというと、「フィールドの連鎖更新」「レコードの 連鎖削除」は、よーく考えて設定しないと意図しないところまで 更新されたり削除されてしまうのかなと。。なので、設定することに よって、プログラムの作りも変わってきてしまうことになるので しょうか。 理解不足で質問自体もモヤモヤしたものになってしまいましたが、 ご教示のほど、宜しくお願い致します。

  • Access ODBCからのリンクのリレーションシップ

    教えてください。 今 Access2000を使ってDBを作っています。 なんとかODBCにテーブルを置いてリンクさせるところまで たどり着いたのですが、 そのテーブルを使ってリレーションシップを組もうと思うと 参照整合性他2つあるチェック項目がチェックできない 状態になってしまっています。 (参照整合性にチェックを入れたいのですが) なぜなのでしょうか? もうさっぱりわからず・・・ どなたか教えてください。

  • Accessのリレーションシップ

    Access初心者です。 Access2010でデータベースを作っていて、行き詰ってしまいました。 テーブル1にフィールドABCDEFがあって、Aに主キーが付いています。(Aはテキスト型でフィールドサイズ10です。) テーブル2にはフィールドAGHがあり、Aに主キーが付いてます。(Aはテーブル1と同じです。) テーブル3にも同じくフィールドAIJがあり、Aに主キーが付いています。(Aはテーブル1と同じです。) テーブル1のフィールドAを主テーブルとし、テーブル2・3のフィールドAにリレーションを組んでいます。 この時のリレーションシップで参照整合性と連鎖更新と連鎖削除にチェックを入れ、種類が一対一になりました。 その後、テーブル1でレコードを追加しようとすると、「テーブル'2'にリレーションシップが設定されたレコードが必要なので、レコードの追加や変更を行うことができません。」と出ます。 これを解決する方法はどうするのか、お教えお願いします。 分かりにくい説明ですいません。

  • データベース分割ツール後のリレーションシップ

    アクセスのmdbファイルをデータベース分割ツールでテーブルとその他に分けたら リレーションシップが全部消えてしまいました。 これはリレーションシップを設定しない方がいいということでしょうか? テーブルのみのBe.Mdbファイルの方はまたリレーションシップを組みなおすことは可能でしたが 元のmdbファイルの方のリンクテーブルでは最初のようなリレーションシップを作ることができません。 私のやり方がおかしいのでしょうか? (access2003です)