時たま、20人位の受講生を相手にAccessを教えているのですが、
20人に一人か二人くらいの割合で以下のことが起きます。

テーブルが片手で数えられるくらいの数しかないテーブルを
リレーションシップで参照整合性のチェックボックスをつけておいて、
しばらく、クエリの話をしたあと改めてリレーションシップを
表示すると、

・ものすごい数のリレーションシップが組まれている。

・そのリレーションシップは何回デリートで削除して上書き保存し、
表示しなおしてもものすごい数のリレーションシップが
相変わらず表示される。

・クエリで何らかの作業をしていても特に支障はない。

具体的なサンプルはあるので理由を教えていただける方
いらっしゃいましたらどうぞご連絡ください。
メールで送ります。

 私がどんなにACCESSをいじくり倒しても、
絶対出てこないのですが、ときたまこういう現象を
出してくれる人がいるのでその度その度なやんでいます。

この現象が起きると、あきらめてMDBを削除してもらうか、
そのままあきらめて使用してもらっています。

どうしても原因が知りたいです。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

Accessとは長年の付き合いですが、初めて聞く症状ですね。

SRまたはSPは適用されているでしょうか?

もしこの症状が出た場合、新規にMDBを作成し、そちらにリレーションなしでテーブルをインポートして、新しいMDB側で、リレーションを設定し直してみてはどうでしょうか?

この回答への補足

早速のお返事ありがとうございました。

以下のアドレスにサンプルを置いておきますので、
よろしければごらんいただければと思います。

http://203.174.72.111/jmong/access.html

別MDBでインポートというお話ですが。
実はその類の方法でいままでごまかしていました(笑)。

今回はできれば、そういった解決策ではなく、
根本的な理由から攻めたかったため投稿させていただきました。

よければ上のアドレスのものをごらんいただけますと
ありがたき幸せ(;_;)涙

補足日時:2001/11/17 13:30
    • good
    • 0

確かに、とてつもないリレーションになってしまってますね(^^;;


ひょっとしたら・・・あの悪名高き「名前の自動修正情報をトラックする」にチェックついていませんか?

SR-1でこの辺りのバグは修正されている筈なんですが、フィールド名が日本語の時に変な動作を起こす事が多いです。このチェックを外してやってみて下さい。
    • good
    • 0
この回答へのお礼

返事遅れてごめんなさい。

確認したら付いていましたが、

”あの悪名高き「名前の自動修正情報をトラックする」”

について私はまったく気にしていませんでした。
勉強不足です。

こやつはどのような悪名高き暴挙をおこすのか
非常に興味があります。

とりあえず、その悪名高きものをはずして
今後の講習会をやってみようかと思います。

とりあえずこの質問についてはgoo事務局から
締め切れ!!と催促きちゃったので

締め切ります。
CHOROLYN様。ありがとうございました。

また不具合でたら投稿します

お礼日時:2001/11/30 14:44

このQ&Aに関連する人気のQ&A

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

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qリレーションの設定って意味あるのですか?

すみません、素朴な疑問です!

リレーションってプログラミング上どんな意味(利点)があるのでしょうか?

たとえば、下記のようにテーブル2つあり、PC種別コードで1:多で
リレーションが設定されていたとします。

■顧客テーブル     ■PCテーブル
氏名 PC種別コード   PC種別コード PC種別名
========    ============
田中 1        1      デスクトップ
佐藤 2        2      ノートブック
伊藤 2 

下記のようにフォーム上で表示する時、
氏名 所有PC種別名
==========
田中 デスクトップ
佐藤 ノートブック
伊藤 ノートブック

所有PC種別名は、リレーションの設定とはまったく無関係に
プログラミングで引っ張ってきませんか?
たとえば、PC種別コードをキーにDlookup関数を使ったりして。
あれ?SQLのSelect文で記述すれば勝手にキーを判断し結合して持ってきてくれるのですかね~?

まったくの基本中の基本の質問をして申し訳ありません。
どなたかこの素朴な疑問を解決してください。
よろしくお願い致します。

すみません、素朴な疑問です!

リレーションってプログラミング上どんな意味(利点)があるのでしょうか?

たとえば、下記のようにテーブル2つあり、PC種別コードで1:多で
リレーションが設定されていたとします。

■顧客テーブル     ■PCテーブル
氏名 PC種別コード   PC種別コード PC種別名
========    ============
田中 1        1      デスクトップ
佐藤 2        2      ノートブック
伊藤 2 

下記のように...続きを読む

Aベストアンサー

>リレーションってプログラミング上どんな意味(利点)があるのでしょうか?

事プログラミングに関しては、リレーションを設定していなくてもすべての事が問題なく出来ます。
開発の途中などは、リレーションの為に テストデータの作成や削除等ちょっとした操作に影響するので まったく設定せずに行うこともあります。
プログラミング上と言うよりも、データベースの管理上データを矛盾無く管理するのに役だちます。
テーブル間の関連付けにより、
・矛盾したデータの入り込みを防げる
・関連した項目の連鎖更新によりデータの整合性を保てる
・関連した項目によりレコードの連鎖削除ができデータの整合性を保てる

プログラミングと言う表現とはずれますが、クエリの作成画面でリレーションを設定しているテーブルを複数配置した場合 設定している結合の情報が静的に設定されます。

QMs Access テーブルBにテーブルAのCDを充てたい。(クエリ?紐づけ?リレーションシップ?)

初心者です。よろしくお願いします。
そもそも、できるのかどうか、できたとして、どうするのかがわからないです。

次の2つのテーブルがあります。
テーブルマスタA には、①市町村CD ②市町村名 ③住所(番地なし)
テーブル受付データB には、①NO ②住所(番地まであり)③受付日 ④⑤・・・

具体的には、以下のとおり。(サンプル)
テーブルマスタA
①    ②      ③
10000  松戸市    千葉県松戸市
20000  鎌ケ谷市本町 千葉県鎌ケ谷市本町
30000  横須賀市   神奈川県横須賀市
テーブル受付データB
①    ②
1    千葉県松戸市五香5-5-5    
2    千葉県鎌ケ谷市本町さくらがおか8-88-8 ひまわりアパート302
3    神奈川県横須賀市横須賀8-7-8   

テーブル受付データBにおいて、②の部分(市町名まで)と、
テーブルマスタAの③をなんとか紐づけて、

クエリで合体させたい。
=テーブル受付データBに、テーブルマスタAの市町村CDを充てたい。
A①市町村CD  A②市町村名 B② B③ B④ B⑤
とすることを切望しています。

***********
たとえば、2つのテーブルに同じフィールドがあって、
それをリレーションシップで紐づけるのは容易ですが、
今回のようなパターンは、
もしかして、私は、ナンセンスなことをしようと苦闘している?と思ってきました。
フィールド名が同じじゃないのに、それを紐づけることができるのでしょうか?

できるとして、どのようにすればよいのでしょうか?

どうぞ、教えていただきたく、お願いいたします!!!

初心者です。よろしくお願いします。
そもそも、できるのかどうか、できたとして、どうするのかがわからないです。

次の2つのテーブルがあります。
テーブルマスタA には、①市町村CD ②市町村名 ③住所(番地なし)
テーブル受付データB には、①NO ②住所(番地まであり)③受付日 ④⑤・・・

具体的には、以下のとおり。(サンプル)
テーブルマスタA
①    ②      ③
10000  松戸市    千葉県松戸市
20000  鎌ケ谷市本町 千葉県鎌ケ谷市本町
30000  横須賀市   神奈川県横...続きを読む

Aベストアンサー

パラメータが表示されたのは指定したフィールドがないからです。
テーブル名とフィールド名を使用している名前に変更してください。

InStr関数は
ある文字列 (string1) の中から指定された文字列 (string2) を検索し、最初に見つかった文字位置を返す文字列処理関数です。
InStr(string1, string2)

やっていることはテーブル受付データBの②(住所)の中からテーブルマスタAの③(住所)を検索し
文字列がある位置を出しています。
必要なのは文字列が含まれているデータのみなので条件を>0としています。

試しにInStrの部分をなくしてクエリを実行してみてください。
「テーブルマスタA」のレコード数*「テーブル受付データB」のレコード数のデータが表示されるはずです。

Qファイルメーカーの再帰定義/リレーション機能について教えて

ファイルメーカーの再帰定義とはどういう事なのか教えてくれませんか?
リレーションのデータの取込みの際、再帰定義と表示されデータがリレーションできないのです。詳しくはファイルが「受注」「発注」「仕入れ」「請求書」と4つありまして、そのフィールド(商品等)を4つのファイル全部にリレーションさせたいのですが、「受注」→「発注」→「仕入れ」まではデータを読込めたのですが、再帰定義と表示されその先の「請求」ファイルまでリレーションできません。どうすればリレーションできるのかも併せて教えて頂けませんか?宜しくお願いします。

Aベストアンサー

「再帰定義」とは計算式の間違いなどでエラーメッセージとして出てきます。どういうことかというと、AフィールドにBフィールドのデータを引用するにあたって、実はBフィールドはAフィールドのデータを何らかの形で引用していたため定義ができない、というような感じの意味です。
4つファイルのリレーションの場合、何か共通の1つのキーで他の3つにリレーションするのは良いのですが、「受注」→「発注」→「仕入れ」とデータがリレーションされた段階でこの3つのファイルのいずれかが「請求書」のデータを引用していると思われます。
この辺を考慮して再度ファイル定義をよく見直して下さい。
回答が遅かったのでもう既に解決していれば幸いです。

QACCESSクエリで複数テーブルの抽出方法

#1583217にて質問させていただいたものです。
私の早とちりで質問を締め切りさせていただいたのですが、クエリが要求通りに出てくれません。
再度、質問させて下さい。

現在、ACCESS2000で2つのテーブルの値を表示するクエリを作成中です。
テーブルは外部データよりインポートしています。

Aテーブル
KEY1 | KEY2 | 値1
--------------------------
00000001 | AAAAAAAA | 100
00000001 | BBBBBBBB | 200
00000002 | AAAAAAAA | 1000

Bテーブル
KEY1 | KEY2 | 値1
--------------------------
00000001 | AAAAAAAA | 500
00000002 | BBBBBBBB | 300


これを、
KEY1 | KEY2 | 値1
----------------------------------------
NULL:00000002 | NULL:BBBBBBBB | NULL:300

と表示したいのです。(Bテーブルにあるデータのみを表示)

どなかた教えてください。お願いします。

#1583217にて質問させていただいたものです。
私の早とちりで質問を締め切りさせていただいたのですが、クエリが要求通りに出てくれません。
再度、質問させて下さい。

現在、ACCESS2000で2つのテーブルの値を表示するクエリを作成中です。
テーブルは外部データよりインポートしています。

Aテーブル
KEY1 | KEY2 | 値1
--------------------------
00000001 | AAAAAAAA | 100
00000001 | BBBBBBBB | 200
00000002 | AAAAAAAA | 1000

Bテーブル
KEY1 | KEY2 | 値1
-----...続きを読む

Aベストアンサー

とりあえず、「Null」の表示がなくても良いなら:
SELECT Bテーブル.Key1, Bテーブル.Key2, Bテーブル.値1
FROM Aテーブル RIGHT JOIN Bテーブル ON (Aテーブル.Key1 = Bテーブル.Key1) AND (Aテーブル.Key2 = Bテーブル.Key2)
WHERE (((Aテーブル.Key1) Is Null) AND ((Aテーブル.Key2) Is Null));


あくまで「Null:」を表示したいのであれば:
SELECT "Null:" & [Bテーブル]![Key1] AS Key1連結, "Null:" & [Bテーブル]![Key2] AS Key2連結, "Null:" & [Bテーブル]![値1] AS 値連結
FROM Aテーブル RIGHT JOIN Bテーブル ON (Aテーブル.Key1 = Bテーブル.Key1) AND (Aテーブル.Key2 = Bテーブル.Key2)
WHERE (((Aテーブル.Key1) Is Null) AND ((Aテーブル.Key2) Is Null));

といったところでいかがでしょうか?
(2番目の方、クエリの構造的に「Aテーブルにないもの→Null」しかないので、テキストで「Null:」表示としています)

とりあえず、「Null」の表示がなくても良いなら:
SELECT Bテーブル.Key1, Bテーブル.Key2, Bテーブル.値1
FROM Aテーブル RIGHT JOIN Bテーブル ON (Aテーブル.Key1 = Bテーブル.Key1) AND (Aテーブル.Key2 = Bテーブル.Key2)
WHERE (((Aテーブル.Key1) Is Null) AND ((Aテーブル.Key2) Is Null));


あくまで「Null:」を表示したいのであれば:
SELECT "Null:" & [Bテーブル]![Key1] AS Key1連結, "Null:" & [Bテーブル]![Key2] AS Key2連結, "Null:" & [Bテーブル]![値1] AS 値連結
FROM Aテーブル RI...続きを読む

Qリレーションの表示方法

MySQL4.1でテーブルを15つ作成して
リレーションを組みました。
でも本当に関連付けれたか心配なんですが
リレーションがちゃんとできているかを
確認するにはどうしたらいいですか?

Aベストアンサー

こんにちは。
MySQL4.1を触ったことがないので、勘違いをしているかもしれませんが、
アクセスみたいにリレーションを視覚的に組めるんですか?
確か3系とかではそんなことはできなかったので、SQL文の生成の段階でリレーションを組んでいましたが!!!
テーブル構造として作ったってことかな???
リレーションが組めているのであれば、そのリレーションを使ったSQL文を作ってデータを確認してみたら、関連付けができているかどうか、確認できます。

Qテーブル作成クエリで主キーを設定

サブフォーム作成のため主キーを設定したいのですが、クエリでグループ化した顧客コードをテーブルとするクエリで主キーを顧客コードに設定したいのですが、クエリ実行で主キー設定方法を教えてください。

Aベストアンサー

テーブル作成クエリ実行後、
DAO で CreateIndex ということになると思います。

おそらく、ワークテーブルで編集し、
元のテーブルに書き戻すような処理をお考えだと思いますが、
あらかじめ、主キーを設定したテーブルを作成しておき、
削除クエリで、全レコード削除、
テーブル作成クエリを追加クエリに変更したもので、
新しいレコードを追加する、
という処理で置き換えられませんか?

Access であるとして、
テーブルの作成、削除を繰り返すと、
MDB ファイルの破損につながりますので。

見当違いだったら無視してください。

QFileMaker pro 11 リレーション本

FileMaker Pro 11で専門学校の学生管理DBを作成しています。
初心者のため、リレーションをどうやればよいか、よくわかりません。

現在使用中の本は
「FileMaker Pro11 スーパーリファレンス」(ソーテック社)のみです。

リレーションについて、「新リレーションで極める FileMaker」という本しかアマゾンで見当たらないのですが、2008年に出版された本で、バージョン9までの対応のようです。
この本は、バージョン11でも十分に対応できる内容なのでしょうか?
もし、問題ないようでしたら購入したいのですが、どなたか使っていらっしゃる方がおられましたら、教えてください。

また、他にPro11対応のリレーションについて詳しく学べるサイトや本がありましたら教えていただけると助かります。

Aベストアンサー

リレーションだけの本もあるのですか・・・
リレーションの基本はVer.7からほとんど変わっていないと思いますけど、
11(持ってないけど)ではポータルフィルターとか有るようですね。
リレーションのどんなところが判らないのですか?
市販本で解決するのかな。

QAccess2007 削除クエリで複数テーブル削除

Access2007で、削除クエリを作成しようとしています。
この削除クエリでは、AtblとBtblのテーブルから該当のレコードを削除したいのです。

Atbl           Btbl
発注No. フラグ        発注No.
 10   1          10
                10
                10
 20   0          20

といったように、Atbl.発注No.1つに対して、Btblは複数レコードあります。
これを、Atbl.フラグ=1 の条件の発注No.に該当するA,Btblのレコードを削除したいのです。

よろしくお願いします。
 

Aベストアンサー

No.2、DexMachinaです。

> どうして削除されないのかわかりません。

私の場合、ヘルプを頼りにトライ&エラーでの経験則で覚えてきたので、
この件についての原理・理論的な説明はできないのですが(汗)、
とりあえず対処法について、説明します。
(一対多のリレーションシップが設定された複数テーブルからクエリを作成
 した場合、多側の削除は可能ですが、一側は削除不可のようです:
 No.1の補足欄で「ちなみに」として触れられている例が該当)


> これを踏まえて、上記の手順を確認しながらクエリを作成してみました

とのことから、リレーションシップの設定で、「参照整合性」と「連鎖削除」
の設定は済んでいるものと思います。
でしたら、「伝票ヘダー」テーブルだけを元にした削除クエリを作成すれば、
『連鎖削除』の設定により、「伝票明細」の該当レコード(=「伝票ヘダー」
で削除されたのと同じ「発注番号」を持つレコード)も同時に削除されます。

SQL文:
Delete 伝票ヘダー.* From 伝票ヘダー Where (伝票ヘダー.出力フラグ = 1);

No.2、DexMachinaです。

> どうして削除されないのかわかりません。

私の場合、ヘルプを頼りにトライ&エラーでの経験則で覚えてきたので、
この件についての原理・理論的な説明はできないのですが(汗)、
とりあえず対処法について、説明します。
(一対多のリレーションシップが設定された複数テーブルからクエリを作成
 した場合、多側の削除は可能ですが、一側は削除不可のようです:
 No.1の補足欄で「ちなみに」として触れられている例が該当)


> これを踏まえて、上記の手順を確認しながら...続きを読む

Q[Access2000]リレーションが設定されたレコードが必要

ACCESS2000

1対1でリレーションを設定しています。
T_マスター
T_内容

ID→ID 参照整合性ON 連鎖OFF 結合の種類「2」

新しいレコードをT_マスターに追加しようと
すると、
「リレーションが設定されたレコードが必要」
とエラーメッセージが出ます。

T_マスターにはレコードが追加されるようなんですが、T_内容にはレコードが追加されないようで
そのためエラーが発生するようです。

このエラーを解消するためにはどのような
リレーションの設定をすればよろしいでしょうか?

Aベストアンサー

>新しいレコードをT_マスターに追加しようとすると「リレーションが設定されたレコードが必要」とエラーメッセージが出ます。
1対1でリレーションでこのメッセージがでるのはテーブルにリレーションの結合する同じキーが無いレコードをリレーションテーブルに保存しようとした場合にでます。

「T_マスターに追加しようとすると・・」でるということはT_マスターはテーブル側ではなくリレーションテーブルになっている可能性があります。
しかし「T_マスターにはレコードが追加されるよう・・」というのは矛盾があります。「T_マスターに追加しようとすると」ではなくT_内容に保存しようとした際にでるのではないでしょうか?
T_マスターにキーがなければT_内容に入力できません。(T_マスターがテーブルでT_内容がリレーションテーブルの場合)

まず結合の種類を確認してください。
T_マスターがテーブルでT_内容がリレーションテーブル

QAccessのクエリとテーブル突合せについて

いつもお世話になっています。

Access2007で下記のような2つのテーブルをクエリで比較した際、なぜかNULLの部分だけのぞんだ結果にならないという現象があり、理由がわからず困っています。

内容としては、「(1)明細データ」のすべてと、「(2)コード表」をあて、「(3)結果リスト」のような表示でコードを追記するようなものです。
下記の「__」は表記の便せん上分かりやすいようNULLを示しています。

「(1)明細データ」はクエリで2つのテーブルを突き合わせ「区」を付けたしたもので、「(2)コード表」はマスタ用のテーブルとして手作りしています。
「(2)コード表」を手作りする際にはNULLの部分はなにも入れずに空にしています。


(1)明細データ
商品名 区
AAAAAA XX
BBBBBB YY
BBBBBB YY
CCCCCC XX
CCCCCC YY
CCCCCC __

(2)コード表
商品名 区 変換CD
AAAAAA XX 000101
AAAAAA YY 000102
AAAAAA __ 000199
BBBBBB XX 000201
BBBBBB YY 000202
BBBBBB __ 000299
CCCCCC XX 000201
CCCCCC YY 000202
CCCCCC __ 000299

(3)結果リスト
商品名 区 変換コード
AAAAAA XX 000101
BBBBBB XX 000201
BBBBBB YY 000202
CCCCCC XX 000301
CCCCCC YY 000302
CCCCCC __ 000399☆

ところが、クエリで実現しようとするとこの「(3)結果リスト」の☆のついている一番最後の結果が

CCCCCC __ ______

となってしまい、変換コード部にコードを埋め込むことができません。
こういう現象は初めての為、どのように聞くべきかわからないのですが、もし何かご存知、ないし、ヒントになり得ることを知っておりましたらお教えください。
以上、よろしくお願いいたします。

いつもお世話になっています。

Access2007で下記のような2つのテーブルをクエリで比較した際、なぜかNULLの部分だけのぞんだ結果にならないという現象があり、理由がわからず困っています。

内容としては、「(1)明細データ」のすべてと、「(2)コード表」をあて、「(3)結果リスト」のような表示でコードを追記するようなものです。
下記の「__」は表記の便せん上分かりやすいようNULLを示しています。

「(1)明細データ」はクエリで2つのテーブルを突き合わせ「区」を付けたしたもので、「(2)コード表」はマ...続きを読む

Aベストアンサー

30代の男です。

作成したクエリ文を載せるほうが回答をもらうためにもよいと思います。
おそらくですが、
SELECT
明細データ.商品名
, 明細データ.区
, [コード表].変換CD
FROM 明細データ
LEFT JOIN コード表
ON (明細データ.区 = [コード表].区)
AND (明細データ.商品名 = [コード表].商品名);

とされていると推察します。
ここで問題とされていますデータ「CCCCCC,NULL」の変換CDが「000299」に変換されない事に関してですが、
まず、「NULL値」であることが問題となります。
「NULL値」は「何も入力されていない」という事になりますので
「NULL値」と「NULL値」を結合させ、結果を表示させるという事はできません。

可能であれば、「区」の項目には「NULL値」ではなく、何か別の文字(半角スペース1つでも可)を
入力することをお勧めします。


すでに多岐に渡る人がシステムを使用しており、変更が不可能というのであれば、

「明細データ」と「コード表」それぞれに以下のようなクエリを作成し、クエリ同士で
結合を行った結果を「結果リスト」とすれば表示は可能です。
-------
クエリ:明細データ変換
SELECT 明細データ.商品名, Nz([区]," ") AS 区変換
FROM 明細データ;
-------
クエリ:コード表変換
SELECT [コード表].商品名, Nz([区]," ") AS 区変換, [コード表].変換CD
FROM コード表;
-------

上記二つのクエリは単純に
[区]という項目の値が「NULL値」であった場合、半角スペース一つで項目を表現するという
ものになります。


以上です。
分かりづらい所がありましたら補足にご記載ください。。

30代の男です。

作成したクエリ文を載せるほうが回答をもらうためにもよいと思います。
おそらくですが、
SELECT
明細データ.商品名
, 明細データ.区
, [コード表].変換CD
FROM 明細データ
LEFT JOIN コード表
ON (明細データ.区 = [コード表].区)
AND (明細データ.商品名 = [コード表].商品名);

とされていると推察します。
ここで問題とされていますデータ「CCCCCC,NULL」の変換CDが「000299」に変換されない事に関してですが、
まず、「NULL値」であることが問題となります。
「NULL値」は「何も入力さ...続きを読む


人気Q&Aランキング

おすすめ情報