過去の桐井戸端BBS (桐ver.8)
22030 住所録で重複禁止項目「氏名」「会社」は許可し「部署」が同じなら禁止をしたい 藤原 2003/08/27-12:08
桐8 SP7 です
住所録などで フォーム 表 両方共で入力する際に
項目「氏名」で同姓同名が有り、尚且つ項目「会社」にも在籍し
判定は「部署」でしか出来ない場合に
重複禁止項目「氏名」「会社」は許可し「部署」が同じなら禁止が
出来ないでしょうか。

22031 Re:重複行に付いて 幅田 2003/08/27-12:22
記事番号22030へのコメント
藤原さん
こんにちは。

>重複禁止項目「氏名」「会社」は許可し「部署」が同じなら禁止が
>出来ないでしょうか。

[氏名][会社][部署]がすべて一致するレコードの入力を禁止するという意味なのでしょうか?
であれば、
メニューバーから行操作→索引定義で
新規の索引を定義し、
重複禁止のチェックを入れて、
整列項目に[氏名][会社][部署]の項目を指定することで
できると思います。


22032 Re:重複行に付いて 藤原 2003/08/27-13:47
記事番号22031へのコメント
幅田さん 早速有り難うございます。
どうも上手に表現できませんので済みません。

同姓同名で別人が存在している場合に(尚且つ同じ会社に)
選別は「部署」でしか出来ません。
「部署も同じならお手上げですが実在しています」この場合は
性と名の間に半角スペースで分けています。

このような場合に 姓名 社名 と入力して 部署で同一と判断した場合に警告したいのです。
and が使えればと方法が判りませんので。
22033 Re:重複行に付いて 悲しげ 2003/08/27-14:57
記事番号22032へのコメント
どもっ、藤原さん

>同姓同名で別人が存在している場合に(尚且つ同じ会社に)
>選別は「部署」でしか出来ません。

>このような場合に 姓名 社名 と入力して 部署で同一と判断した場合に
>警告したいのです。and が使えればと方法が判りませんので。

つまりこう云うことでしょうか。
幅田さんが挙げられた方法だと、1行の入力が完了した後でないとメッセージが出ない。
行としてではなく、[部署]項目の入力を終えた時点でメッセージを出したい、と。

それと、

>「部署も同じならお手上げですが実在しています」この場合は
>性と名の間に半角スペースで分けています。

このカッコ閉じは何を意味するのでしょう?
姓名・社名・部署が全て同じの時にこの「お手上げ」(?)メッセージを出して、
[姓名]項目に移動して姓と名の間に半角スペースを入れさせると云うこと・・・・でもありませんよね?(?_?)

22039 Re:重複行に付いて 悲しげ 2003/08/27-16:37
記事番号22033へのコメント
>選別は「部署」でしか出来ません。

序に云えば、人事異動で部署変更もあるだろうことも気になります。(^^;)

と云う訳で、この件、私も以前にけっこう悩んだ問題なので、便乗的に名案を期待したいです。> all



余談ながら、私のかなりシロートっぽい対策を以下に叙述しておきます。
私は重複禁止設定(つーか identity を保持)する項目としては[ヨミ]を当てました。
こうすると「鈴木一郎」を、例えば「鈴木□一郎」とか
「鈴木_一郎」とか「鈴木_一郎_」……と区別する必要がなくなります。
漢字の記述をこっちの都合で勝手に微変更する訳にはいかないですし。(^^;)
その代わり「鈴木一郎」と「鈴鬼市朗」もぶつかることになる訳ですが、
その辺りも含めてヨミ(イコールID)の方で微変更しています。
例えば「すずき・いちろう」「すずき・いちろう2」「すずき・いちろう3」と無制限に可能だったりします、
ヨミの部分一致検索する場合に何らの影響も与えることなしに。(^^)v

クロートはIDをヨミで当てたりはせずに、いかにもcode的に「0001」とかにするのでしょうけど、
でもそうなると、例えば「藤原糊香」が既に登録済なのに、
未登録と思い込んで別code「0123」を当てて重複登録してしまうことへの予防策も別途必要となります。
ヨミをIDに使うとこの点の予防にも流用できちゃうので、
我ながら「シロート恐るべし」なんて思うところ無きにしも非ず。(^^;)(^^;)
結婚・離婚等での改姓対策もあるのですが、これはまた別途。

あ、その上で私が悩んだこと(便乗的に名案を期待しているところ)は、
要するに重複禁止設定とイベントとの相性の問題です。

22041 Re:重複行に付いて 藤原 2003/08/27-16:43
記事番号22033へのコメント
悲しげさん

早速有り難うございます。上手に表現できないのですが、

>幅田さんが挙げられた方法だと、1行の入力が完了した後でないと
>メッセージが出ない。行としてではなく、[部署]項目の入力を終え
>た時点でメッセージを出したい、と。


>>「部署も同じならお手上げですが実在しています」この場合は
>>性と名の間に半角スペースで分けています。

これは、同姓同名であり尚且つ、同じ会社同じ部署で別人が存在しています。

この場合[姓名]項目入力する際に半角スペースを入れれば
別のデータとして判断されますので約4000件位のデータで2件存在します。

22042 Re:重複行に付いて 悲しげ 2003/08/27-16:59
記事番号22041へのコメント
どもっ、藤原さん
う〜ん、やはり仰ることが判りません。
いえ、個々のセンテンスの意味は判るのですが、それらのつながりを
ここから読み取ることは困難です。
各センテンス間の因果関係が判るような書き方をしましょう。
22043 Re:重複行に付いて 悲しげ 2003/08/27-17:19
記事番号22042へのコメント
藤原さんの書き方が、なぜ判りにくいかを説明しますと、

>幅田さんが挙げられた方法だと、1行の入力が完了した後でないと
>メッセージが出ない。行としてではなく、[部署]項目の入力を終え
>た時点でメッセージを出したい、と。

この引用は何のためでしょう?
と云うか、この引用の後には、例えば「そのとおりです」とか「いえ違います」とか続くのがフツーです。
で、違う場合は、どのように違うかを叙述する必要があります、フツーは。

>>「部署も同じならお手上げですが実在しています」この場合は

この後ろに、カッコ閉じ内の記述の内容を再説明されているようなのですが(^^;)、
私が#22033で尋ねたのはそうではなくて、
なぜカッコで囲んだのか?なのです。
云い換えれば、続けて「同一と判断した場合に警告したいのです」と書かれているところの
警告メッセージのことではなかったのですか?
22050 重複禁止の内容についての確認 佐田 守弘 2003/08/27-23:01
記事番号22030へのコメント
藤原さん
悲しげさんも書かれている様に、私にも質問の文章の内容が理解できない部分があります。
この様な場合、「何のために何がしたい」という様に、用途や目的を差し支えない範囲で書いてもらえると、
言外の意味も理解してもらえるかと思います。

●重複禁止
そして特に分りにくいのが、
>項目「氏名」で同姓同名が有り、尚且つ項目「会社」にも在籍し
>判定は「部署」でしか出来ない場合に
>重複禁止項目「氏名」「会社」は許可し「部署」が同じなら禁止が
>出来ないでしょうか。
と書かれている部分です。

この意味について、幅田さんが#225031に書いておられる様に、[氏名][会社][部署]の3項目が
全て一致する重複を禁止すればよいと理解するのですが、違いますか?
そうであれば、この3項目についての重複禁止を設定した索引を作れば、解決します。

それとも別の意味があって、例えば[氏名][会社]が一致する重複は許可するけど、
[氏名][部署]および[会社][部署]が一致する重複は禁止するという意味が
あるのでしょうか(考えにくいケースですが)。

●データベースデータの一般論として
データベースのデータとして扱う上で、かなり無理な事をされています。

1)同姓同名
もし同姓同名の人がいる時には、氏名の間にスペースなりアンダスコアを入れて
別データ扱いするとの事ですが、これはデータベースの考え方としては、筋が良くありません。
もしどうしても行うのでしたら、[同名枝番]の様な項目を設け、通常は1,
同じ会社部署に同姓同名者がいる時には、2,3と連番号を入れて別人として扱うのが正しい方法です。

2)元来、この重複はあり得る
何のためにその様な事をされるのかが書かれていないので、一般論としてのコメントになります。
[氏名][会社][部署]での重複を禁止したいとの事ですが、この重複禁止自体に無理があります。
もしこれが社員名簿であったたとしたら、どうなりましょうか。
「鈴木_一郎さん。内の会社には既に○○部に同名の人がいますから、採用をお断りします。」となりませんか?

データベースの重複禁止とは、元来重複してはならないもの、重複するはずがないものに対して、設定するものです。

佐田守弘(KS-00119)

22051 想定されるケースとして 佐田 守弘 2003/08/27-23:17
記事番号22050へのコメント
藤原さん
質問の主旨が分りにくいので、少しでも整理するために、書かれている内容を満たす想定ケースを設定してみました。

【想定ケース】
このデータベースの目的は、無料情報誌、あるいは無償サンプルを配付するダイレクトメールのアドレス作りにある。
送付希望者の申込み書に基づいて、アドレス登録をするが、時として登録済みの人が重複登録を希望して来る事がある。
そこで、氏名の他、社名と部署が一致する場合には、登録済みではないかとの警報を出し、
別人と確認できれば、重複していても登録する。
そして質問文には書かれていないが、もし部署が移動になった場合にも、同じ会社で
同姓同名の人がいないかのチェックができると好ましい。
-------------------------------------
以上を考えると、一連の質問文章が理解しやすいですね。
この様なケースでも、一般的な回答は、既に書いてある様に、
3項目での重複禁止の索引を作る方法が教科書的な回答です。

●上記想定ケースでの解決方法
しかし、特にこの様なケースだとしたら、重複禁止を設定するのではなくて、
別のもっと好ましい答えもありそうです。
それは重複禁止を設定するのではなくて、氏名と社名を検索項目とした表引きを設定し、
部署名を表引きしてみる方法です。
もし入力しようとする部署名が存在すれば、既にそのデータは登録されている事が分りますし、
仮に別の部署で登録されている場合にも、異動によって部署名が変更されたかどうかを考える手掛かりも得られます。

佐田守弘(KS-00119)
22059 改めて重複禁止について 藤原 2003/08/28-11:39
記事番号22051へのコメント
佐田 守弘さん 悲しげさん 
混乱させるような質問で本当に申し訳ありません。
主旨が判り易く上手に表現出来ませんので質問を一度リセットして頂き改めて

住所録入力で 同姓同名のデータは入力を許可し、
       同一人のデータ入力は許可しない。

判定の基準を 同姓同名 入力許可する 会社名同じ 入力許可する
       部署名同じ 入力許可しない としたいのです。

それで    入力項目 「氏名」「会社名」「部署」の3項目を照合して
       3項目のデータ全てが一致している場合に
       入力を許可しないとしたいのですが。

22060 Re:改めて重複禁止について 悲しげ 2003/08/28-13:24
記事番号22059へのコメント
どもっ、藤原さん、

>質問を一度リセットして頂き改めて

(^^;)(^^;)(^^;)(^^;)(^^;)(^^;)(^^;)
「リセットして改めて」全く同じ質問を挙げても無意味ですよ〜。
この間のやり取りは、喩えて云えば次のような構造にあることを、先ずはご理解ください。

Q1 ×××について教えて下さい。
A1 ×××と云っても、あーだとかこーだとか色々ありますが?
Q2 ×××です。
A2 いえ、だから×××は具体的にどういうことなのかと?
Q3 ×××です。
A3 ×××だけじゃなくて、あーだとかこーだとかと尋ねているのですが?
Q4 ×××です。
A5 これでは埒があきません。(;_;)
Q6 上手に表現出来ませんので質問を一度リセットして頂き改めて(Q1に戻る)

まるで無限ループです。(^^;)(^^;)(^^;)(^^;)(^^;)(^^;)
このループから抜け出すカギは、回答者からの個々の問い合わせに具体的に応えることだと思います。
例えば、先ずは#22031の幅田さんの回答ではなぜ駄目なのか、からでも。

22062 Re:改めて重複禁止について 藤原 2003/08/28-14:38
記事番号22060へのコメント
悲しげさん

どうも大変ご迷惑お掛け致しました。
はっきりと理解できるような質問ができませんでしたので
質問取り下げさせて頂きます。
どうもすみませんでした。

22065 重複禁止索引>こちらからの話も通じてない様ですね 佐田 守弘 2003/08/28-18:02
記事番号22059へのコメント
藤原さん
質問内容は、以下の記述で理解できました。
>それで    入力項目 「氏名」「会社名」「部署」の3項目を照合して
>       3項目のデータ全てが一致している場合に
>       入力を許可しないとしたいのですが。

そしてその答えは、幅田さんもまた私も何回も言って来ている様に、
「これら3項目についての重複禁止を設定した索引を作る」
です。

これについて幅田さんが始めから書いておられるのに、
質問の言い方を変えておられる部分が理解できないので、こちらから確認します。

上記の「これら3項目について重複禁止を設定した索引を作る」の意味を理解されて
ないのではと思うのですが、いかがでしょうか。

もし、「そんな方法は始めから分っている。だがそれでうまく行くはずがない。」
と思われていたら、理解していない事になります。

参考までに書いておきます。
「これら3項目について重複禁止を設定した索引」とは、[氏名][会社名][部署]の
それぞれの項目について、重複禁止を設定した索引を合計で3つ作ると言う意味ではありません。

作るべき索引は索引項目にこれら3つを同時に設定した1つの索引です。
(念の為)

佐田守弘(KS-00119)
22066 【解説】複数項目の組合わせに対する重複禁止方法 佐田 守弘 2003/08/29-01:03
記事番号22030へのコメント
#22062によると原質問者が質問を取り下げた形で尻切れトンボになってしまい、
重要な事項があいまいのまま終ってしまうおそれがあります。
後から参考にされる方々のためにログをしっかり残す意味で、表題に書いた
「複数項目の組合わせに対する重複禁止方法」
について解説をし、このツリーのまとめとさせて頂きます。

●複数項目の組合わせでの重複を禁止したい例
原質問には具体的にどの様なケースなのかが書かれていません。
おそらく私が#22051で想定した様なケースか、これに類似したようなケースではなかろうかと思います。
しかしこの様なケースについては、#22051でも書きましたとおり、重複禁止を設定するのは、本質的には適しておりません。

そこで、複数項目の組合わせに対する重複禁止、言い換えると、
複数項目が全て同一になる場合を禁止する例として、ホテルの客室予約を考えてみます。
ご存知かと思いますが、この例は、Access(ver.1か?)のリファレンスにも
書いてあった様に、複数項目が全て同一になる事を禁止しなければならない典型的な例です。

なお、会議室の予約やレンタル機器の管理などについても同じ考え方になります。

すなわち、何室かの客室があるホテルで泊まり客の予約を記録するデータベースを考えてみます。
この話に関係ある項目として、[日付]と[室番号]があるとします。
日付については同じ日付の泊まり客は、複数存在しても良いので、[日付]の重複は存在します。
また、室番号についても、今日の予約と明日の予約は別の予約ですから、
[室番号]も1つの表の中で重複して存在します。

しかしながら同じ日に同じ室番号の予約が重複するとしたら、
これは予約のダブルブッキングになってしまいます。
つまり、[日付]と[室番号]の両方の組み合わせが重複する事は禁止しなければなりません。
これが、私が作った言葉ではありますが、「複数項目の組合わせに対する重複禁止方法」です。
あるいは、複数項目の全てが同一値になる場合の重複の禁止と言っても良いかと思います。

●複数項目の組み合わせで重複禁止をする方法
この様な重複禁止を行う場合には、該当する複数項目を組み合わせた索引を作り、
この索引に重複禁止を設定します。
より具体的に言うと、索引定義のダイアログで、整列項目に、該当する複数項目を列記します。
このホテルの予約であれば、[日付]と[室番号]の2項目を指定した索引を作ります。
そしてこの索引で重複禁止に重複禁止にチェックマークを入れておけば、
設定した複数項目中の一部の組み合わせが重複するのは許可するが、
全項目が重複する事は禁止されます。

原質問の例で改めて言い直せば、[氏名]と[会社名]あるいは[氏名]と[部署]
および[会社名]と[部署]の2項目までが重複するのは許可され、3項目とも
重複する事が禁止されます。

●索引定義の時の項目の順序について
重複禁止の上では、索引定義に列記した項目の順序は関係ありません。
[日付][室番号]の順でも、[室番号][日付]の順でも同じ重複禁止になります。
異なるのは、次の2つです。

索引を使って並べ替えを行う場合:この整列索引で並べ替えを行うと、
まず大きくは項目で並び、その中で次の項目で並びます。
つまり、並べ替えの順序が変わります。

検索を行うときの速度
[日付][室番号]の順の索引の場合には、日付だけで検索を行うときにも、
この索引が有効です。
しかし、室番号で検索を行うときには、この索引は使えません。
言い換えるなら、前方一致の検索の際にも索引が使えるが、
途中の部分一致には使えないのと同じです。

●分りやすく言うと
この複数項目の組み合わせの索引とは、分りやすい例にたとえると、
その複数項目をつなぎ合わせた項目を作り、
その項目で整列索引を作るのと同じと理解すると分りやすいでしょう。
確認したわけではありませんが、複数項目を組み合わせた索引を作ると、
指定した順序で項目値がつなぎ合わさった値が作られているのではないかと思います。

佐田守弘(KS-00119)


22068 Re:重複行に付いて うにん 2003/08/29-12:01
記事番号22033へのコメント

>>このような場合に 姓名 社名 と入力して 部署で同一と判断した場合に
>>警告したいのです。and が使えればと方法が判りませんので。
>
>つまりこう云うことでしょうか。
>幅田さんが挙げられた方法だと、1行の入力が完了した後でないと
>メッセージが出ない。行としてではなく、[部署]項目の入力を終え
>た時点でメッセージを出したい、と。

結局上記が要望だとすると、フォームで入力するしかなさそうですね。
索引だと、メッセージのカスタマイズもできませんよね?

#表引き()で「表全体を検索対象」のときはこっそり多重化していると思われるので、
自分自身も表引きできるようになればいいのにね。
そうなれば、[姓名]の項目制約条件に設定して、

>姓名・社名・部署が全て同じの時にこの「お手上げ」(?)メッセー
>ジを出して、[姓名]項目に移動して姓と名の間に半角スペースを入
>れさせる

なんてことがフォームを使わずにできるかも?

戻る