Access2000のリレーションシップの使い方と注意点

このQ&Aのポイント
  • Access2000のリレーションシップを使って、支店名と会計年度の情報を管理する方法について解説します。
  • 支店の数が多い場合でも使いやすい方法を紹介します。
  • リレーションシップを設定して、支店名と会計年度の情報を他の支店や会計年度でも利用できるようにします。
回答を見る
  • ベストアンサー

Access2000のリレーションシップ?について

Accessの初心者です。 取引先に出す文書に支店名と当方の会計年度を印刷します。 使い方としては、最初に会計年度と支店名を登録します。次に、文書発送先の登録をします。 そして、レポートを出力したいと思ってます。 今できているものは、支店名と会計年度は、「既定値」にしてます。 これを、他の支店や会計年度が変わっても使えるように、したいのですが、どうしたらいいでしょうか。 たぶん、支店名と会計年度を登録するテーブルを作って、リレーションシップというのを使うのだろうと思いますが、うまくいきませんでした。 支店の数が多いのでメインの入力フォームの中でコンボボックスやリストボックスは使いにくいので避けたいところです。 宜しくお願いします。

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

  • ベストアンサー
  • HAL007
  • ベストアンサー率29% (1751/5869)
回答No.2

年度に拘るのは履歴を残す為なんでしょうか? どしてもと言うのであれば次の様なテーブルを作るしかないと思います。 簡略にしましたので上手く行くかは試していないのでご了承下さい。 1.支店  1)支店コード  2)支店名  ・他支店固有のフィールド    2.相手先  1)相手先コード  2)相手先名  3)相手先住所  4)所要時間  5)支店コード 3.発送履歴  1)年度  2)発送先コード リレーションは  ・1-1)と2-5)を1対多で設定。  ・2-1)と3-1)を1対1で設定。 選択クエリで年度と1の支店コードに条件式を入れ必要な項目を抽出する。 レポートで上記クエリを入力にしてフォームを作ります。 これで支店が変わっても出来ますし、全店と一カ所でまとめて 個別の出力にも使えます。

mada_mada
質問者

お礼

深夜におよんでのご回答まことにありがとうございます。 回答を読んでイメージがつかめました。 明日試させていただきます。 不明な場合はまた質問させていただきます。

その他の回答 (1)

  • HAL007
  • ベストアンサー率29% (1751/5869)
回答No.1

問題を整理して下さい。 先ず、会計年度、支店名、発送先の3つの要素は毎年決算書など の資料を送るカバーレターでしょうか? ならば、年度は毎年変わりますが文書の中ではコンスタント値で 良いと思います。→レポートの直接埋め込めば済むのでは? 次に、支店と発送先の関係ですが、これは1対1の関係では? ならば、支店、発送先を1レコードとなるテーブルを作れば済みます。 従って、リレーションを設定する必要がありません。 この程度のことであればWordの差し込み印刷機能を使うと 簡単に出来ますけど・・・・

mada_mada
質問者

補足

さっそくのご回答ありがとうございます。 支店の数は、50以上です。支店単位で最低200件から500件ぐらいの相手先に支店名で発送します。 自分で作ったものは、自分の所だけで使うので、テーブルのフィールドに「支店名」と「年度」を作って、既定値として固有の名称を入れてます。 従って、テーブルのレコードは、「取引先の住所」や「所要のデータ」とともに「支店名」と「年度」で構成しました。 これを他の支店で使うときには、「支店名」の所を既定値としてある固有の名称を変更しなければならないので、これをなんとか、最初に、支店名を登録する方法のような形にしたいのです。 わかりにくい説明で申し訳ありませんが宜しくお願いします。

関連するQ&A

  • アクセスのリレーションシップに関して

    アクセスでDBを構築して業務で使用しているのですが、容量がかなり大きくなってきたのでデータと、フォーム等による入力・検索を別DBで実施したいと思っています。そこで、元DBをコピーしてコピー先のテーブルを全て元DBからのリンクにしようとしたのですが、リンクを貼った後にテーブル名を置き換えしようとするとリレーションシップを削除しろというメッセージがでてしまいます。下手くそなシステムで、後でリレーションシップを貼りまくっているので、いちいちリレーションシップ削除・再構築をしようとすると膨大な作業になってしまいます。どなかか、リレーションシップを削除せずにテーブルを置き換える方法をご存知ないでしょうか。

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

    Access2013を勉強しています。 リレーションシップについて参考書(2冊)を見ていて疑問を持ったのですが、 二つのテーブルでリレーションシップを定義したいそれぞれのフィールド名は同じ名前だとうまくいかないのでしょうか?参考書では、値は同じ(例えば1、2、3・・・)は同じなのにフィールド名は微妙に違う名前をつけているのですが(例えばテーブルAでは顧客IDでテーブルBでは取引先ID)・・・ 宜しくお願いします。

  • AccessのコンポボックスでNULLを入れたくない

    AccessのコンポボックスでNULLを入れたくない Accessのテーブルで、NULLの代わりに0を入れたいのですが、どうすればいいのでしょうか? テーブルの既定値は0です。 そのテーブルには、フォームのコンボボックスから値を入れます。 そのコンボボックスの選択は必修ではありません。 そのため、選択しない場合は、既定値の0が入ります。 また、選択した場合は、数字が入ります。 問題は、コンボボックスで選択して、やめた場合です。 まず、コンボボックスで選びます。 でも、きが変わり、デリート(削除)でコンボボックスを空欄にします。 そして、更新した場合、テーブルにNULLが入ります。 私の希望は、コンボボックスをデリート(削除)した場合、既定値の0を入れたいのですがどうすればいいのでしょうか? 値要求は、メッセージ(ダイアログ?)が出るので、設定しないものとします。(他の人が、そのメッセージが出るたびに、どうすればいいかきいてくるからです。) よろしくお願いします。

  • Access コントロールの種類の変更について

    いつもお世話になっております。 Accessのフォームに関して教えて下さい。 クエリを元にフォームを作って単表形式で表示させています。 新規データをフォームで入力して登録しようと思いました。フォーム上のテキストボックスをコンボボックスに変更して、入力をより簡略化しようとしました。 コンボボックスに変更することはできたのですが、データシートビューにしてコンボボックスの▼をクリックしても登録してあるデータ(○○マスタとしてリレーションシップを組んであるものです)が表示されません。 そのコンボボックスのプロパティのどこかを変更しなければいけないのでしょうか?また、根本的に考え方が間違っているのでしょうか? ぜひ教えて下さい。よろしくお願いします。

  • accessのレポートで…

    レポート(テーブル1から作成)にあるフィールド1には「1・2・3…」という数字が入っています。 この1・2・3はテーブル2(ID・名前)とリンクしています。 フォーム上ではコンボボックスにして、テーブル2の名前も表示するようになっています。 (テーブルに値としては入っていません) これでレポートを作成した場合、テーブル2の名前を表示させたいのですが、テキストボックスで Iif([フィールド1] = "1","****",Iif(… というようにしてしまうと、せっかくリンクにしたのにデータが固定になってしまうのを避けたいんです。 フォームだとコンボボックスの更新後処理とレコードの移動にコードをかけば最新の情報を表示することができたんですが、レポートでもこのようなことはできるんでしょうか? (コードをかいて処理したいです) Access2000です。 よろしくお願いします。

  • Access2010 イベントプロシージャのエラー

    Accessの初心者です。テキストを読みながら、フォームに配置したコンボボックスにイベントプロシージャを設定して実行したところ、エラーメッセージ表示されました。どなたか御指導頂ければ幸いです。 1.関連するオブジェクト a) 一側テーブル名: T_選手プロフィール  このテーブルに「ID_選手プロフィール」という主キーフィールドがあります。 b) 多側テーブル名: T_期間成績  このテーブルに「選手プロフィール親ID」というフィールドがあります。 * リレーションシップウィンドウで「ID_選手プロフィール」と「選手プロフィール親ID」にリレーションシップを設定しました。 c) クエリ名: Q_期間成績_現役選手プロフィール  このクエリの中に、「ID_選手プロフィール」と「氏名」と「登録番号」というフィールドがあります。 d) フォーム名: F_期間成績 サブフォーム「T_期間成績明細」を中に入れたフォームを作成しました。 2.フォーム上での操作 a) フォーム「F_期間成績」に、コンボボックス「登録番号_コンボ」というコンボボックスを配置しました。 b) このコンボボックスのコントロールソースは、c)の「Q_期間成績_現役選手プロフィール」の「選手プロフィール親ID」です。 c) このコンボボックスで選択した「ID_選手プロフィール」という値に対応する、「氏名」をフォームに新たに配置した非連結のテキストボックス「氏名_テキスト」に、「Q_期間成績_現役選手プロフィール」の「氏名」フィールドの値を表示させようとしています。 d) 「登録_コンボ」コンボボックスの更新後処理からコードビルダーを起動し、テキストを参照しながら以下のコードを書きました。 Private Sub 登録番号_コンボ_AfterUpdate() Name = DLookup("[氏名]", "Q_期間成績_現役選手プロフィール", "登録番号=登録番号_コンボ") If Not IsNull(Name) Then 氏名_テキスト = Name End If End Sub e) フォームにてコンボボックスを操作したところ、「実行時エラー '94': Nullの使い方が不正です。」という実行時エラーが表示されました。色々と試してみましたが、上手くいきませんでした。 分かりにくい説明で恐縮ですが、宜しくお願い致します。

  • access検索フォームからメイン、サブフォームへ

    access初心者です。 先日、「メイン、サブフォームの入力」について質問した者です。 取引先の会社情報を管理するために、access2007で顧客管理を作成しています。 現在、取引先本社情報とその支店情報を新規登録及び既存顧客を編集するフォーム「会社登録フォーム」と「会社検索フォーム」を主にVBAで作成しています。 <実現したいこと>: 既存顧客を編集する場合は「会社検索フォーム」から抽出し、「選択」ボタンで会社情報を「会社登録フォーム」に呼び出し、本社及びその支店情報を編集する。 <困っていること>: 「会社検索フォーム」から顧客を選択後、「会社登録フォーム」では、支店情報は変わりますが、本社情報が変わりません。 (メッセージ:「リレーションシップが設定されたレコードがテーブル'支店テーブル'にあるので、 レコードの削除や変更を行うことはできません。」というメッセージがでます。) <会社登録フォームの環境>: 会社の本社情報をメインフォーム、その会社の支店情報をサブフォームに、単票形式のタブコントロールで複数画面にして、支店ごとに分けて入力できる登録フォームを作成しています。 本社テーブルの会社IDを主キーに、支店テーブルの支店IDを主キーにしてリレーションシップを設定し、クエリ「Q_本社支店」というテーブルを作成しています。 <会社検索フォームの環境>: ・「Q_本社支店」テーブルを元に「会社検索フォーム」を作成しています。 ・「会社名」「支店名」等で検索し、データシートで表示します。 ・ 抽出されたレコードの「選択」ボタンで、「会社ID」を「会社登録フォーム」の本社情報の「会社ID」に代入します。 色々調べてやってはみたのですが、上手くいきません。 行き詰まり感があり、困っております。 ご教授のほどよろしくお願いいたします。

  • Access97:サブフォームを切り替え表示したい

    アクセスで仕事で用いられる専門用語の和英辞書データベースを作っております。 その辞書は用語の持つ意味や使われ方などから分類をしています。 分類一覧テーブルは分類ID,分類からなり、用語一覧テーブルは用語IDと用語からなります。 これらをつなぐのが和英辞書テーブルで、辞書ID,分類ID,用語IDからなり、 分類ID,用語IDはそれぞれ分類一覧テーブル,用語一覧テーブルのそれとリレーションシップを 組んでいます。 メインフォーム(既定のビュー=単票フォーム)には分類フィールドを作り、コンボボックスにします。 分類を選択したときまたはその横に「表示」ボタンを設置しておいてそのボタンをクリックしたときに 選択された分類に属する用語一覧がサブフォーム(既定のビュー=帳票フォーム)にリロードされてるように切り替えて表示させたいと考えています。 メインフォーム元:分類一覧テーブル,サブフォーム元:用語一覧テーブルにしたフォームは作成できました。 メインフォームのレコードを切りかえるとサブフォームも切り替わりますが、 コンボボックスの選択でサブフォームを切りかえ(たように見せ)る上記のようなフォームに このフォームから編集することはできるでしょうか? 無理なら新規にフォームを作りなおすとしてできるでしょうか? 自分の発想で2通りやってみましたが、いずれも失敗でした。 (詳しく書いたら文字数が800を超えたので省略します) テーブルの構成やリレーションを多少変えてもいいしフォームのレコードソースにクエリービルダを使ったりVBを組んでもいいので、メインフォームのコンボボックスの選択値によってサブフォームの表示を切り替える方法について教えて下さい。

  • ACCESS リレーションシップの未入力

    ACCESSで見積書を作成しているのですが、リレーションシップを行っている個所を未入力とするとレポートでエラーが表示されます。 下の写真では、指令テーブルの指令Noは必ず入力するようにしているのですがその他の、指令テーブルの納品先と内訳テーブルの指令No(内訳に同じ司令Noのレコード0という意味)は入力を省略してもいいようにしています。 しかし、指令テーブルの納品先と内訳テーブルの指令Noを未入力とするとレポートでエラーになります。 どうしてエラーになるのか理屈はわかるのですが解決方法がわかりませんでした。 未入力でもその他の個所は表示されるようにならないでしょうか? よろしくお願いします。

  • 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)まで削除されてしまう ことになる?? ※そもそも例がちょっと悪かったかもしれません。。 何が言いたいかというと、「フィールドの連鎖更新」「レコードの 連鎖削除」は、よーく考えて設定しないと意図しないところまで 更新されたり削除されてしまうのかなと。。なので、設定することに よって、プログラムの作りも変わってきてしまうことになるので しょうか。 理解不足で質問自体もモヤモヤしたものになってしまいましたが、 ご教示のほど、宜しくお願い致します。

専門家に質問してみよう