過去の桐井戸端BBS (桐ver.8)
15660 メイン&サブフォームでのリレーションはどのように管理されているのでしょうか ジョイフル 2002/04/10-03:58
桐8sp6です。
二つの表をメイン&サブフォームで編集していました。
2つの表のデータを連結するための項目を、メインテーブルにはカウンタ型で、サブテーブルには、長整数で設定していました。
リレーションは、1対多になります。
フォームで、およそ5000件のデータを入力したのですが、最近表形式で開いてびっくり!
サブテーブル側の長整数型の項目にデータが入力されていませんでした。
ですから、表形式でデータのリレーションを確保することができませんでした。

原因は、参照の整合性の設定がうまく言っていなかったからですが、

しかし、データが入力されていなくても、メイン&サブフォームで開くと、ちゃんとそれぞれのデータがリンクされています。
このような場合、フォームでのリレーションは、どのように管理されているのでしょうか?
また、サブテーブルの項目にデータを一括入力する方法はあるのでしょうか?

15661 Re:メイン&サブフォームでのリレーション 悲しげ 2002/04/10-12:07
記事番号15660へのコメント
どもっ、ジョイフルさん
参照整合性定義は、表間の関係です。
メイン&サブフォームの設定はフォーム間の設定で、リンク自体は
メインフォーム内の「サブフォーム」タブのグループ値リストで設定されていたと思います。
表間の設定とフォーム間の設定は、(矛盾してないことが前提ですが)一応は別物です。
参照整合性を定義せずに、メイン&サブの設定だけでも普通は充分に動くと思います。
間違っているかもしれませんが、私の経験上、参照整合性があった方が便利なのは、
「主キーを削除する時」くらいではなかったかと思います
(「主キーを更新する時」はメイン&サブフォームだとそれだけでやってくれますから)。←但しこの辺りチト自信なし。(^^;)

>また、サブテーブルの項目にデータを一括入力する方法はあるので
>しょうか?

う〜ん、この部分の趣旨(状況と云うか?)が判りません。

15679 Re:メイン&サブフォームでのリレーション ジョイフル 2002/04/11-00:53
記事番号15661へのコメント

悲しげさん,レスありがとうございます

>また、サブテーブルの項目にデータを一括入力する方法はあるので
>しょうか?
>う〜ん、この部分の趣旨(状況と云うか?)が判りません。

データは、販売管理見たいなものです。
顧客台帳と、販売品台帳の2つの表を製作し、それをメイン&サブフォームで入力しました。
この場合、顧客Noをキー項目にしていたのですが、フォームで入力してきたデータを、
あるとき販売品台帳の表を開いたら、販売品台帳の表の顧客Noの項目にデータが何も入っていませんでした。
ですから、販売品台帳だけを見ても、販売品を誰が買ったか判別できませんでした。
はじめは、表が壊れ、データの整合性が取れなくなってしまったと思ったのですが、
フォームで開くと、ちゃんと入力したとおり、データの整合性が取れるのです
ちょっと不思議な感じでした。
キー項目のほかに、フォームでは、レコードに隠しコードを持っていて、
それで整合性を取っているのでしょうか?

15686 Re:メイン&サブフォームでのリレーション 悲しげ 2002/04/11-16:49
記事番号15679へのコメント
どもっ、ジョイフルさん

>キー項目のほかに、フォームでは、レコードに隠しコードを持っていて、
>それで整合性を取っているのでしょうか?

ジョイさんの問題意識は、
(1)上述どおり内部的な仕組みがどうなっているかと云う興味なのか?
(2)メイン&サブの設定の仕方が判らないことによる質問なのか?

もし(1)なのだとしたら、私には全然判りません。が、

>また、サブテーブルの項目にデータを一括入力する方法はあるので
>しょうか?

との前々回の質問から、(2)のことだと仮定してコメントを続けます。
質問の主旨が不明なので、以下、想像をたくましくさせていただきますが、
ジョイさんは、どうも参照整合性定義の呪縛に囚われ過ぎているのではないでしょうか?
先にも書いたように、表と表の関係である参照整合性定義と、
フォームとフォームの関係であるメイン&サブは、基本的には別物であると認識して下さい。
ですから、例えば参照整合性のことを全く知らない人でも、
メイン&サブフォームをビシバシ使っている場合も多いと思います。
このことを確認するために、ジョイさんも試しに(メインwfm用とサブwfm用の)ふたつの表の間の
参照整合性を断ち切ってから、メイン&サブフォームを定義してみて下さい。
サブフォームにはこの場合、[顧客No]をグループ項目にしておきます(その表には当然[顧客No]についての索引が
存在しているものとする)。
その上で、メインフォームの中にサブフォームオブジェクトを作成するに際して、
「サブフォーム名」をこのフォーム名、そして「グループ値リスト」を[顧客No]とします。
メインフォームとサブフォームの「リンク」はこれだけで成立します
(表間の参照整合性定義の必要なしで……、混乱を避けるために「キー」項目とは呼びません)。
かくして、このメイン&サブフォーム上で入力すれば、サブフォーム用の
表のグループ項目[顧客No]にも自動的に値が入っている筈です。

※その上で参照整合性を設定するもよし、せざるもよし、です。
参照整合性が関係して来るのは、主キーを「更新」した時や「削除」し時だけだったような気がします。

15710 ありがとうございました。 ジョイフル 2002/04/13-16:11
記事番号15686へのコメント
悲しげさん、いろいろなアドバイスありがとうございました。
桐のフォームの中には、隠しコマンド的な未知な機能がたくさん眠っていそうです。
そろそろV9のアナウンスがあってもいいころだとは思いますが、更なるバージョンアップに期待します
15712 Re:ありがとうございました。 悲しげ 2002/04/13-21:57
記事番号15710へのコメント
あらま、ジョイフルさんの関心は、
どうやらメイン&サブフォームの各対象表がどうやってリンクされているのかと云うか、
その内部仕様に関する興味の方だったみたいですね。失礼しました。(^^;)
そうゆうのって、色々想像を逞しくする方はいらっしゃるでしょうけど、出て来るかなぁ?
15720 Re:ありがとうございました。 ジョイフル 2002/04/15-02:54
記事番号15712へのコメント
最近、さまざまなトライをしています
伝票タイプのメインフォームの1レコードのなかに、また伝票のサブフォームを設定してみたり、
3階層のメイン&サブフォームを設定したりと、いろいろチャレンジしています。
動きは、怪しいけれども、結構動く場合があります。
自分の予想では、項目のリンクではなく、隠されたキー項目があり、
どうもそれで参照の整合性が保たれているような気がしています。

15721 Re:ありがとうございました。 尾形 2002/04/15-09:09
記事番号15720へのコメント
>自分の予想では、項目のリンクではなく、隠されたキー項目があり、どうもそれで
>参照の整合性が保たれているような気がしています。
そうですかぁ
項目リンク以外ないと思いますけどね
メインサブフォームといっても、リンクを貼らずに作成する事もありますし
(どちらもメインフォームみたいな取扱という意味です)

戻る