過去の桐井戸端BBS (桐ver.8)
4053 イベントで表引き切替 今村 誠 2000/1/1-20:46
桐では表引きといって電話番号や郵便番号から、簡単に住所ができます。
私は、電話番号から市区町村を表引きして、市区町村から、大字や?丁目を
表引きしています。
 しかし、郵便番号のデータは膨大で、私のマシンでは表引きに、3秒前後かかり
ます。
入力済みの市区町村の値に応じて、表引きファイルの指定ができれば、格段に早く
なると思います。
例えば、大阪府大阪市の場合は、27osaka.csvのcsvファイルから表引きできれば、
"06−"から"大阪府大阪市都島区"が、"大阪府"から"善源寺町"が表引きできます。
北海道が一番多いのですが、大阪などは、レコード件数が四千件弱ですので、即座に、
表引きできます。
どなたかイベントで、項目値に応じて表引きファイルの切替ができる方法をご存知
の方は、
サンプルをご教授下さい。
また、マイクロソフトのアクセスで、上記のことができますか。
項目名は、市区、住所、建物の三項目です。
電話番号 06-6***-**** 0944-5*-****
市区 大阪府大阪市都島区 福岡県大牟田市
住所 善源寺町一丁目十二番 新栄町1丁目12の8
建物 通天閣ビル5F202号 共栄ビル391号

表引きの表示窓が小さくて悩んでいます、市区や、住所を表定義で文字数を増やし
ても、
表引きすると、縮んでしまいます。
この項目を表引きするときはこの大きさで、という指定はできないのでしょうか。

4054 Re:イベントで表引き切替 佐田 守弘 2000/1/1-23:40
記事番号4053へのコメント
今村 誠さん
表引きの速度が遅いとの事ですが、下に書かれている[電話番号][市区][住所][建物]の項目からなる表を表引き元とし、電話番号を参照
項目として他の項目を表引きしていると考えて宜しいですね。
後、データが膨大との事ですが、何件くらいでしょうか。もし数十万件程度のデータでしたら、速度に影響するほどのデータ件数ではな
いので、表引き表を分ける必要はありません。

●索引は正しく作ってありますか
表引きの速度は索引が適切にできているかどうかによって、速度が大幅に変わります。ご質問の件は、索引が正しく設定されていないの
で、表引きの速度が遅いのではないかと見受けます。
この場合でしたら、[電話番号]の項目をキーとする整列索引を設定し、表引きの設定でも、この索引を指定して下さい。
なお、電話番号は重複する番号が存在しないはず(今頃、共同電話はないでしょう)なので、索引に重複禁止も設定して下さい。
これだけで、速度が劇的に変わるはずです。

私の例でいえば、郵政省提供の郵便番号データ(13万8千件、13MB)を使って表引きをしております。100〜200MHzのPentiumでも、ほ
ぼ瞬時に表引きできるのが普通です。
ただし、誤った番号を入力してしまったなど、該当データがない場合には全レコードサーチをするらしく、時間がかかります。これは致
し方ないと思います。

●MS-Accessの場合
表引きという機能は、桐独自の機能と言って良いでしょう。似た様なものは、Excelにあるlookup関数なのですが、この関数がAccessで
使えるかどうかは知りません。
表引きの機能は、本来のデータベースの機能からすれば邪道(?)なのでしょうね。正統派を誇るAccessにはその機能はありません。
Accessで行うとしたら、おそらく、クエリーを作成し、そのクエリーをデータソースとするコンボボックスをフォーム上に作成するので
はないかと思います。いずれにしてもAccessではテーブルだけで表引き的な入力を行う事はできません。

●桐の表引きパネルの表示
表示する度にサイズを変更する事は出来るのですが、そのサイズの保存ができない様ですね。
入力用のフォームを作成し、入力支援ボタンを付けたテキストボックスを使ってみたら同でしょうか。

佐田守弘(KS-00119)

4055 Re:イベントで表引き切替 隠伯人浦島 2000/1/2-00:26
記事番号4054へのコメント
佐田先生、もう始めているんですねぇ
頭下がりますわ、今年も宜しくお願いします。

佐田 守弘さんは No.4054「Re:イベントで表引き切替」で書きました。
中略
>●MS-Accessの場合
>Accessで行うとしたら、おそらく、クエリーを作成し、そのクエリーをデータソースとするコンボボックスをフォーム上に作成するので
>はないかと思います。いずれにしてもAccessではテーブルだけで表引き的な入力を行う事はできません。
まずテーブルにコンボ索引を設定すると表引きは可能です
通常、クエリー上で処理しますが、テーブルに設定されていれば、クエリーにも反映します。
フォームにコンボボックスを設定し、SQLを利用すると良いかな
更新後処理に、イベントプロシージャに条件を書いてやれば、
絞り込んだ状態でコンボ索引が出来ます。ACCESSの場合は、設定してやる箇所が多くて結構手間がかかりますね。
それと、最初のコンボ索引を実行すると、全データを一旦読みこんで処理する様で、おいおいまだかいなって感じで
時間が掛かりますが、次回の処理は瞬時に表示します。
中略

テキストデータの処理は、桐の方が上と、考えていますが
桐は、なんやかんやと言っても、手作業処理が自由ですし、便利なソフトです。
アクセスはアクセスの利点もありますね
使い分けが必要化もしれません。

でわ

4056 Re:イベントで表引き切替 今村 誠 2000/1/2-01:51
記事番号4054へのコメント
あけましておめでとうございます。
早速のご返事大変ありがとうございます。
郵便番号のデータは膨大で、私のマシンでは表引きに、3秒前後かかります。
入力済みの市区町村の値に応じて、表引きファイルの指定ができれば、格段に早くなると思います。
例えば、大阪府大阪市の場合は、27osaka.csvのcsvファイルから表引きできれば、
"06−"から"大阪府大阪市都島区"が、"大阪府大阪市都島区"から"善源寺町"が表引きできます。
北海道が一番多いのですが、大阪などは、レコード件数が四千件弱ですので、即座に、
表引きできます。
項目名は、市区、住所、建物の三項目です。   市区の表引き定義画面……1
電話番号 06-6***-****      比較項目 電話番号
市区 大阪府大阪市都島区 ………運賃計算用で訂正不可にしてます。  表引き表 電話
住所 大阪府大阪市都島区善源寺町一丁目十二番     使用索引 電話番号
建物 通天閣ビル5F202号     検索項目 電話番号
 値項目 住所(市区の事)
 住所の表引き定義画面……2 郵便番号の表引き……3
比較項目  市区 比較項目 住所
 表引き表  郵便番号 表引き表 郵便番号
 使用索引  電話住所 使用索引 住所
 検索項目  電話住所……市区の事 検索項目 住所
 値項目   住所 値項目  郵便番号
表引きの表示窓が小さくて悩んでいます、市区や、住所を表定義で文字数を増やしても、
表引きすると、縮んでしまいます。
この項目を表引きするときはこの大きさで、という指定はできないのでしょうか。

メモリーが64M、HD5G、Celeron 300MHZ の時に2から3秒でした。
実は年末にメモリーを128Mに増設したのに、試験しないで質問してしまいました。
●佐田様の返事を見て再度テストしたら、0.5秒から、1.5秒で、表引きできました。
ちなみに電話住所と住所で索引を作ったときの郵便tblのサイズは 26Mになりました。
テキストボックス[市区]には入力支援ボタンを使用しています。
リストの種別……表引き項目、自動表示……未定義時 選択時置換にチェック,入力支援クローズに
チェックして、運賃計算しています。
●住所入力に関しては、Accessより桐が使い勝手が良いようですね。
桐ver3から、4、5、7、8と桐は、より早く、より便利になりました。満足しています。
●メモリーや、cpuが遅いマシンもあるので、イベントで表引き表の切替ができるのであれば、
 ご教授いただければ幸いです。

4057 イベントで表引き切替の前に索引を再確認して下さい 佐田 守弘 2000/1/2-15:19
記事番号4056へのコメント
今村 誠さん

●再度確認
>例えば、大阪府大阪市の場合は、27osaka.csvのcsvファイルから表引きできれば、
から拝見しますに、私が行っているのと同じく、郵政省の郵便番号データの様ですね。
使用マシンは
>メモリーが64M、HD5G、Celeron 300MHZ の時に2から3秒でした。
との事なので、私のVR-C20S(MMXPentium200MHz)、およびPentium130MHzに比べて余程早いのではないかと思います。
エプソンの互換機(586RA:Pentium90MHz、HD1GB、メモリ48MB)だと、わずかながらストレスを感じる程度です。
ですから、どう考えても索引の設定に問題がある様に思えてなりません。

そこで念のために再確認するのですが、索引は検索項目について正しく出来ておりますでしょうか。
今までの経験から、表引きの遅さは、索引定義の誤りが原因になる事がほとんどです。

良くある間違いは、検索項目での索引と、検索項目が含まれている索引との間違いです。

>ちなみに電話住所と住所で索引を作ったときの郵便tblのサイズは 26Mになりました。

がやや気になります。今村さんの表引きは、電話番号での表引きと思いました。
そうでしたら、[電話番号]の1項目についての索引を作っておく事が必要です。
[電話番号][住所]の2項目の索引があっても、これは電話番号と住所をつなげた文字列での検索を行う時の索引であり、電話番号での索引にはなりませ
ん。
ですから、仮にこの様な索引で表引きの検索を行うと、索引がないとみなされて、索引なしでの検索が行われます。この場合には、概ね私の環境で2〜3秒
程度かかります。

以上の点をもう一度確認させて下さい。

●表引きファイルの変数での指定
上記の整列索引の問題を解決するのが崎戸考えましたので、こちらはあえて答えるのを止めておりましたが、参考までに。
表引きファイルは変数で指定可能なはずです。つまり、表定義での表引きの設定で、表引きファイルに「&表引きファイル名」の様に、変数名で指定しま
す。その変数にフルパス名を含めた表引き元のファイル名が代入してあれば、表引きが可能なはずです。

ただし、ここで大きな問題があります。と言うのは、この変数をどこで定義し、どこで表引きするファイル名を代入するかです。
表編集や表定義の際には、変数が定義されていませんから、うまく設定できるかどうかに問題が残ります。もちろん、表編集を行うとエラーになります。
しかし、イベントハンドラの中であれば、変数を定義し、市区名に応じて&表引きファイル名の値を変更すれば良いわけです。

いろいろと課題がある方法ですが、試みて下さい。

●表引きせずに表を検索する方法
イベントハンドラの中で都道府県別の表を開いて、電話番号で検索を行います。そして、検索できた値を変数に代入し、これを表引き値として代入する項目
の初期値に設定します。表引きではありませんが、表引きと同じ事が行えます。

佐田守弘(KS-00119)

4062 Re:イベントで表引き切替の前に索引を再確認して下さい 今村 誠 2000/1/3-21:03
記事番号4057へのコメント
佐田 守弘さんは No.4057「イベントで表引き切替の前に索引を再確認して下さい」で書きました。
>今村 誠さん
>
>●再度確認
> >例えば、大阪府大阪市の場合は、27osaka.csvのcsvファイルから表引きできれば、
>から拝見しますに、私が行っているのと同じく、郵政省の郵便番号データの様ですね。
>使用マシンは
> >メモリーが64M、HD5G、Celeron 300MHZ の時に2から3秒でした。
>との事なので、私のVR-C20S(MMXPentium200MHz)、およびPentium130MHzに比べて余程早いのではないかと思います。
>エプソンの互換機(586RA:Pentium90MHz、HD1GB、メモリ48MB)だと、わずかながらストレスを感じる程度です。
>ですから、どう考えても索引の設定に問題がある様に思えてなりません。
>
>そこで念のために再確認するのですが、索引は検索項目について正しく出来ておりますでしょうか。
>今までの経験から、表引きの遅さは、索引定義の誤りが原因になる事がほとんどです。
>
>良くある間違いは、検索項目での索引と、検索項目が含まれている索引との間違いです。
>
> >ちなみに電話住所と住所で索引を作ったときの郵便tblのサイズは 26Mになりました。
>
>がやや気になります。今村さんの表引きは、電話番号での表引きと思いました。
>そうでしたら、[電話番号]の1項目についての索引を作っておく事が必要です。
>[電話番号][住所]の2項目の索引があっても、これは電話番号と住所をつなげた文字列での検索を行う時の索引であり、電話番号での索引にはなりませ
>ん。
>ですから、仮にこの様な索引で表引きの検索を行うと、索引がないとみなされて、索引なしでの検索が行われます。この場合には、概ね私の環境で2〜3秒
>程度かかります。
>
>以上の点をもう一度確認させて下さい。
>
>●表引きファイルの変数での指定
>上記の整列索引の問題を解決するのが崎戸考えましたので、こちらはあえて答えるのを止めておりましたが、参考までに。
>表引きファイルは変数で指定可能なはずです。つまり、表定義での表引きの設定で、表引きファイルに「&表引きファイル名」の様に、変数名で指定しま
>す。その変数にフルパス名を含めた表引き元のファイル名が代入してあれば、表引きが可能なはずです。
>
>ただし、ここで大きな問題があります。と言うのは、この変数をどこで定義し、どこで表引きするファイル名を代入するかです。
>表編集や表定義の際には、変数が定義されていませんから、うまく設定できるかどうかに問題が残ります。もちろん、表編集を行うとエラーになります。
>しかし、イベントハンドラの中であれば、変数を定義し、市区名に応じて&表引きファイル名の値を変更すれば良いわけです。
>
>いろいろと課題がある方法ですが、試みて下さい。
>
>●表引きせずに表を検索する方法
>イベントハンドラの中で都道府県別の表を開いて、電話番号で検索を行います。そして、検索できた値を変数に代入し、これを表引き値として代入する項目
>の初期値に設定します。表引きではありませんが、表引きと同じ事が行えます。
>
>佐田守弘(KS-00119)
>

4063 Re表引きファイルのイベント指定 今村 誠 2000/1/3-21:06
記事番号4062へのコメント
項目名は、電話番号、市区、住所、建物、郵便番号の5項目です。
1 電話番号 06-6***-****
2 市区   大阪府大阪市都島区 ………運賃計算用で訂正不可にしてます。 表引きで入力
3 住所   大阪府大阪市都島区善源寺町一丁目十二番 表引きで入力後追加入力
4 建物   通天閣ビル5F202号 手入力
5 郵便番号 5340015                     表引きで入力
最初の表引きで市区を特定 特定した市区から住所を表引き後"丁目番地"を手入力 住所から郵便番号を表引き
  市区の表引き定義画面……1 住所の表引き定義画面……2       郵便番号の表引き……3
比較項目 電話番号 比較項目  市区       比較項目 住所
 表引き表 電話.TBL 表引き表  郵便番号.TBL    表引き表 郵便番号.TBL
 使用索引 電話番号 使用索引  電話住所   使用索引 住所
 検索項目 電話番号 検索項目  電話住所……市区の事       検索項目 住所
 値項目 電話住所(市区の事) 値項目   住所       値項目  郵便番号
{この表引き表(電話.TBL)は} {この表引き表(郵便番号.TBL)は120000件あり索引を2個作成しているので時間がかかる}
  {3400件弱なので瞬時にでる} {Pentium133で2から3秒cceleron300 126Mメモリー搭載で0.5から1.5秒でした。}
●実は年末にメモリーを128Mに増設したのに、試験しないで質問してしまいました。お騒がせしました。
>表引きファイルの変数での指定
&県名という名の変数を表引きファイルに指定してイベントを作成して、表引き定義……2を使用して、表引き表に、
&県名で表引き定義……1 の値項目である市区の入力支援ボタンの入力支援クローズに表引き表(上記の例では、
c:\data\桐\郵便番号\大阪府.tbl)を代入するようにしました。
住所を入力する前に、変数を確認すると、&県名には、上記の文字列が代入されていましたが、桐の表引き表がでないで、
エラーメッセージ KD1307 表引き条件の設定に誤りがあります。&県名,電話住所,住所………
となりました、。
やはり表引きは変数でなく、文字列定数の必要があるようです。
>表引きせずに表を検索する方法
 表引き定義……2 では、[電話住所]を表引きで検索しています。この項目は、郵便番号.TBLには同じ列値がたくさんあります。
 ちなみに、住所録の[市区]とは、郵政省の郵便番号データの県名と市区名を連結して置換した、新規項目で、電話番号から表引きするので、
 郵便番号.TBLに[電話住所]という名前をつけました。
住所とは、県と市区と町を連結して置換した、新規項目です。住所録の市区を、比較項目に、郵便番号.TBLの電話住所を検索して、
町や大字を特定するために、使用します。
ですから、表引き以外では、検索で編集表を開いて値をイベントで張り込みはできるかもしてませんが、表の開け閉めに時間がかかるので、
今のままの設定でいきたいと思います。



戻る