過去の桐井戸端BBS (桐ver.8)
13635 表引き表の使用索引が機能しない原因は? 小松亀一 2001/10/19-21:24
仙台の小松です。いつも質問ばかりで恐縮です。

いつも顧客簿を新受付日順で共有モードで立ち上げて仕事にかかります。
顧客簿は、[顧客ID]、[顧客名]等の項目があります。[顧客ID]は、
数値型で、例えば本日一番最初の顧客は、挿入初期値で200110191と自動的に入力されるよう関数を設定しています。
新受付日順と言う索引は、[顧客ID]が大きい順即ち最新受付の順にに並びます。

顧客簿は、次に事件簿入力の際、表引き表として機能しています。
事件簿の表引きの際の使用索引は、新受付日順です。この段階では、
表引き表としての顧客簿は、新受付日順に表示されます。

次に文章作成のために発信簿に入力する際も、発信簿の[顧客名]について、
比較項目を顧客名、使用索引を50音順、検索項目をふりがな、値項目を顧客名として、
自動表示をチェック無し、先頭一致で検索するをチェックして、顧客簿を表引き使用しております。

たとえば発信簿の[顧客名]に、"にしむら"と入力して▼ボタンをクリックして
顧客簿の[顧客名]と検索項目としての[ふりがな]を表示して入力します。

私の希望は、"にしむら"と入力して、表引き表顧客簿をひらくと、
使用検索50音順に"にしむら"という[ふりがな]を持つデータをずらりと並ばせることで、
理屈上は当然そうなるはずと思っております。

ところが、表引きされた顧客簿は、使用索引50音順と表示されているのにも拘わらず、
使用索引無しの状態で表示されます。
確かに先頭一致で"にしむら"と言うふりがなの合致したデータが出てくるのですが、
最も上の行の"にしむら"で、めざす"にしむら"は、遙か下の行にあります。

索引は50音順ですので"にしむら"が集まるはずですが、使用索引50音順は
機能せず、おそらく全ての索引が機能しない状態の行順です。

最初に顧客簿を新受付日順で共有モードで立ち上げているため、
その後の50音順との使用索引指定は、無効になるのでしょうか。

顧客簿は色々な表で表引き使用しているため、最初に立ち上げておかないと、
共有使用モードに不都合が出てきます。

同様の症状で悩んで解決された方がいましたら、解決方法をご教示頂ければ幸いです。
13637 Re:表引き表の使用索引が機能しない原因は? 佐田 守弘 2001/10/20-01:10
記事番号13635へのコメント
小松亀一先生
共有モードでは、他のユーザーによって表が更新される可能性があるため、
予め作ってある索引が意味を持ちません。このために共有で開いた表は索引が使われない仕組みになっています。
御質問の件も、これが原因かと思います。

対策ですが2つほど考えられます。

@予め表引き表を開いて並べ替えをしておく
表引きする表を予め開いておき、目的項目(この場合には読み順)で並べ替えておきます。
表の開き方ですが、フォームに設定してあるイベントのメイン部分で開き、同時に並べ替えを行います。
但しこの方法は、フォームを開く度に並べ替えを行うので、多少時間がかかります。
注意点としてはそのイベントを他のフォームと共用しない事です。
共用すると、同じ表を開き並べ替えを仕様とした時にエラーになる場合があります。

A表引き表はローカルに持っておく
表引き表の更新頻度が低いのであれば、ローカルドライブに持っておき、
これを専有で開く方が良いかも知れません。

佐田守弘(KS-00119)
13643 Re:表引き表の使用索引が機能しない原因は? 小松亀一 2001/10/20-20:25
記事番号13637へのコメント
佐田先生、おばんです。
早速のレス有り難うございました。

>共有モードでは、他のユーザーによって表が更新される可能性があるため、
>予め作ってある索引が意味を持ちません。このために共有で開いた表は索引が使われない
>仕組みになっています。御質問の件も、これが原因かと思います。
やはりそうでしたか。

>対策ですが2つほど考えられます。
>@予め表引き表を開いて並べ替えをしておく
>表引きする表を予め開いておき、目的項目(この場合には読み順)で並べ替えておきます。
>表の開き方ですが、フォームに設定してあるイベントのメイン部分で開き、同時に並べ
>替えを行います。
顧客簿については一括処理で受付順−受付日の古い順から並べる−で予め開いておりました。
表引き表は最初に開いておかないで、最初に顧客簿を表引き表として使用している事件簿を開いてから顧客簿を開こうとすると、
「他ユーザーが使用中」とのエラー表示で開けなくなるからです。

一括処理で受付簿を受付順で共有モードで開いた後、50音順に並べ替え、その後50音順で
顧客簿に表引きをかけてもやはり索引は無効ですね。

イベントで開くと言うことはフォーム呼び出しコマンドで開くと言うことでしょうか。

>但しこの方法は、フォームを開く度に並べ替えを行うので、多少時間がかかります。
>注意点としてはそのイベントを他のフォームと共用しない事です。
>共用すると、同じ表を開き並べ替えを仕様とした時にエラーになる場合があります。
済みません。ここは意味が理解できず、もう少し考えてみます。

>A表引き表はローカルに持っておく
>表引き表の更新頻度が低いのであれば、ローカルドライブに持っておき、これを専有で
>開く方が良いかも知れません。
そうですね。私も顧客簿をローカルドライブにコピーして使おうかとも思いましたが、
サーバー上の顧客簿を更新するたびに、追加行のみを読み込み作業をさせるのも面倒に感じ、
そのままにしておりました。

ご教示を参考にもう少し方法を検討します。
有り難うございました。
13644 Re:表引き表の使用索引が機能しない原因は? toshi-chan 2001/10/20-20:53
記事番号13635へのコメント
小松さん、こんばんは。
解決策の結論は佐田さんが書かれているとおりだと思います。

共有モードにおける索引に関しては、このBBSでも時々話題になります。
桐のマニュアルには「共有モードでは索引は使用されない」と書かれているだけで、それ以上詳しいことはわかりません。
それで実際の挙動に首をひねる場合も出てきます。

1.小松さんの現象
 事件簿.tblを開いて入力を開始し顧客簿.tblから表引き(値条件)するとき、表引きパネルに表示される顧客簿は新受付日順に並べ替えられているわけですね。
ところが、発信簿.tblを開いて顧客簿から表引きするときには、顧客簿の並び順がバラバラになっているのですね。

 顧客簿.tblには、「新受付日順」という索引定義がされており、この索引を使用する並べ替え条件が「新受付日順」という名前で登録されているものと思います。

1番目の事例では
  「索引が使用されている」
との主旨ですが、私の持っている印象は
  「並べ替えは実行しているが索引は使用していない」
です。2番目の事例は基本状態のようですね。

2.並べ替え機能の仕様
 索引を使用する並べ替えと、使用しない並べ替えの違いですが、
   索引を使用する
     ・・・・桐の内部ではデータを並べ替えていない。追加したデータは自動保守される。
   索引を使用しない
     ・・・・桐の内部ではデータを並べ替える。追加したデータは自動保守されない。
となります。ここが、索引を使用したときに処理が高速化する理由のようです。

3.1番目の事例
 とりあえず、桐に付属している郵便番号簿Zipjis.tblで実験してみました。この表には約10万件のデータがあり、
「郵便番号順」という索引と、この索引を使用する「郵便番号順」という並べ替え条件が設定されています。
表の表示条件の「開始時に使用する並べ替え条件」に、この並べ替え条件を登録してみます。
この状態で表を開きます。
まず、専有で開きます。あっという間に開きます。おそらく、索引を使用した並べ替えが実行されているのだと思います。
次に、共有で開いてみます。数秒間かかり、その間桐の画面左下には「並べ替え中」と表示されています。
この時間のかかりようは、おそらく、「並べ替えはしているものの索引を使用していない」からでしょう。
もともと共有モードでは索引は使用されないわけですから。言い換えると、
   「索引を使用する並べ替え条件であっても、それを共有モードで実行すると索引を使用しないで並べ替える。」
ということだと思います。
 小松さんの1番目の事例はこの現象をご覧になっているものと思います。

4.2番目の事例
 バラバラになる理由は私もわかりません。1番目の事例のように「新受付日順」に並んでいてもよさそうですよね。
表引きパネルに使用索引が表示されている件は、私にも経験があります。これは、表定義の表引きの設定において、
索引を記入してあるために、単にそれが映っているだけだと思うようになりました。
表示されない方がわかりやすいですよね。

*************************************************************************
推測の部分があるコメントですが、謎を解くきっかけにしていただければと思います。
詳細は管理工学に問い合わせないとわからないでしょうね。 
13646 Re:表引き表の使用索引が機能しない原因は? 尾形 2001/10/20-22:16
記事番号13635へのコメント
どうも、小松さん、こんばんは

佐田さんが書いてあるように、マスタはローカルに持つのがいいと思います。
サーバ上のマスタ(原本となる)は共有更新で開き、随時更新可能としておいて、
ローカルに書き出す(読み込む)表引きや参照等は、ローカルのマスタを見るように絶対パスで書く

自分は、マスタを更新したら、フラグを立てて
各端末に自動的にとり込むようにしています。
ライブラリに登録して、全てのフォーム開始時に参照させています。

共有は、ほんと極一部の管理ファイル程度しか使えない(実用できない)ような気がします

ホント、なんとかならんものでしょうかね

13652 共有で開かれる表の索引 佐田 守弘 2001/10/21-22:29
記事番号13644へのコメント
toshi-chanさん、ALL
共有で開いた表の索引ですが、リファレンスに書かれている事の例外があります。
共有で開かれた表は、基本的には設定されている索引は無効になります。この理由は前コメントにも書いた通り、
共有の場合、他のユーザーによってレコードデータが勝手に更新される場合があり、
更新されると索引情報が無効になるためです。
このため、共有で開かれている場合には、基本的に既に作られている索引は無視されます。

但し例外があります。それは、共有モードで開かれていても、実際には1ユーザしかそのファイルを開いていない場合です。
1ユーザーであれば、索引情報が他のユーザーによって勝手に更新される事はないので、索引は有効と判断できます。
この場合に限り、共有モードでも索引が使われます。

佐田守弘(KS-00119)

上記情報のソースは伏せますが、最も信頼できる情報源からのアドバイスと御理解下さい。
13653 Re:表引き表の使用索引が機能しない原因は? 小松亀一 2001/10/21-23:07
記事番号13644へのコメント
toshi-chanさん,おばんです。

ご丁寧な解説有り難うございます。
>1.小松さんの現象
> 事件簿.tblを開いて入力を開始し顧客簿.tblから表引き(値条件)するとき、表引きパネルに表示される顧
>客簿は新受付日順に並べ替えられているわけですね。

toshi-chanさんのご解説を受け、滅多に見ないマニュアルを見て色々試してみました。
顧客簿を開かず事件簿だけ開くと確かに表引き使用索引の新受付簿順に並びました。
事件簿を開いたまま発信簿を開くと表引き使用索引は50音順に並びました。

しかし顧客簿を共有で開いた後は、全て使用索引は無視され、基本状態で開かれます。
基本状態では概ね受付順であり、最終行に一番新しい日付の行が来ます。
尚、顧客簿を専有で開くとその後は、顧客簿を表引き対象表としている表は全て「他のユーザーが使用中」との表示が出て開けなくなります。
従って表引き対象表の使用索引が機能するのは、表引き対象表が開かれていない場合だけなんですね。

>1番目の事例では
>  「索引が使用されている」
>との主旨ですが、私の持っている印象は
>  「並べ替えは実行しているが索引は使用していない」
済みません。ここは私の勘違いでした。索引使用も並べ替えもされない基本状態でした。

>次に、共有で開いてみます。数秒間かかり、その間桐の画面左下には「並べ替え中」と表示されています。こ
>の時間のかかりようは、おそらく、「並べ替えはしているものの索引を使用していない」からでしょう。もと
>もと共有モードでは索引は使用されないわけですから。言い換えると、
>   「索引を使用する並べ替え条件であっても、それを共有モードで実行すると索引を使用しないで並べ替
>    える。」
>ということだと思います。
> 小松さんの1番目の事例はこの現象をご覧になっているものと思います。
済みません。先に述べたとおり、どうも基本状態のようで、並べ替えもなされていないようです。

兎に角一旦表引き対象表を共有モードで開くと、使用索引指定は無効になり、基本状態でしか表引きできないようです。

お陰様にてモヤモヤしていたものが少しずつハッキリしてきました。
有り難うございました。



13654 Re:共有で開かれる表の索引 小松亀一 2001/10/21-23:12
記事番号13652へのコメント
佐田先生、おばんです。

>このため、共有で開かれている場合には、基本的に既に作られている索引は無視されます。
色々やってみてハッキリ認識しました。

>但し例外があります。それは、共有モードで開かれていても、実際には1ユーザしかそのファイルを
>開いていない場合です。
>1ユーザーであれば、索引情報が他のユーザーによって勝手に更新される事はないので、索引は有効と
>判断できます。この場合に限り、共有モードでも索引が使われます。
済みません。たった今、色々表引きの実験していたところです。
私だけ、即ち1ユーザしかそのファイルを開かない状況で実験したのですが、共有モードにすると索引は全て無視されるように思いましたが。


13655 Re:表引き表の使用索引が機能しない原因は? 小松亀一 2001/10/21-23:18
記事番号13646へのコメント
尾形さん、おばんです。レス有り難うございます。

>佐田さんが書いてあるように、マスタはローカルに
>持つのがいいと思います。
色々やってみて結局は、索引を使用したい場合は、ローカルに持つしかないようですね。

>自分は、マスタを更新したら、フラグを立てて
>各端末に自動的にとり込むようにしています。
すみません。フラグの意味が判らずコンピュータ用語事典を引くと次の通り出ていました。
フラグ flag〔←かぎ〕〔一般:旗〕→札 →タグ →旗
プログラムの実行中に,特定の状態が成立したかどうかを識別するために調べられるデータ項目のこと.
すなわち,識別または表示を目的としてデータに付けられる標識(indicator)であり,
通常は1ビットが使用される.使用中表示,書き込み禁止表示,割込み条件発生表示等に利用される.
[日外アソシエーツ株式会社 日外コンピュータ用語辞典第3版]

マスタ更新を各端末に自動的に取り込むのは一括処理を組んでいるのでしょうか。
一括処理であれば基本的仕様をご教示頂ければ幸いです。
13656 細かいところをチェックしてみてください toshi-chan 2001/10/22-02:38
記事番号13653へのコメント
小松さん、こんばんは。
共有モードの表引きでは、索引を使用できなくても、並べ替えることはできるはずなんですが。

事件簿.tblと発信簿.tblの表定義はどうなっているでしょうか。項目属性設定パネルの表引きタブを見てください。
この際、使用索引ははずしてしまってはどうですか。また、「編集表を使用する」に必ずチェックを入れてください。

また、一括処理の構造を下記のようにしてみてはどうですか。こうすると事件簿.tblを開いて入力を開始し、
表引きパネルが開いたときに新受付日順で並んでいるはずなのですが。
もしそうならなかったら、桐に問題があるのかなという気もします。


******************************************************


変数宣言 …
・・・・・・・・・・・・・・・・・・・・・
表 ”顧客簿.tbl”,モード=共有更新
並べ替え条件登録 条件名="新受付日順",{[顧客ID]降順}
並べ替え 条件名="新受付日順"
・・・・・・・・・・・・・・・・・・・・・
表 ”事件簿.tbl”,モード=共有更新
・・・・・・・・・・・・・・・・・・・・・

13659 Re:細かいところをチェックしてみてください 小松亀一 2001/10/22-07:21
記事番号13656へのコメント
toshi-chanさん、おはようございます。

重ねて丁寧なご教示有り難うございます。
>事件簿.tblと発信簿.tblの表定義はどうなっているでしょうか。項目属性設定パネルの表引きタブを見てください。この
>際、使用索引ははずしてしまってはどうですか。また、「編集表を使用する」に必ずチェックを入れてください。
なるほど。これで表引き表を編集状態の並べ替えされた状態で使用する出来ると言うことですね。

>また、一括処理の構造を下記のようにしてみてはどうですか。こうすると事件簿.tblを開いて入力を開始し、表引きパネル
>が開いたときに新受付日順で並んでいるはずなのですが。
>もしそうならなかったら、桐に問題があるのかなという気もします。
>表 ”顧客簿.tbl”,モード=共有更新
>並べ替え条件登録 条件名="新受付日順",{[顧客ID]降順}
>並べ替え 条件名="新受付日順"
>・・・・・・・・・・・・・・・・・・・・・
>表 ”事件簿.tbl”,モード=共有更新

早速やってみましたが、仰るとおり、表引きパネルは新受付日順に並んでいました。
実はこれまで表引き対象表の顧客簿を最初に開いておかないと事件簿が開けないため、特定のクライアントパソコンで
先ず顧客簿を開くという実に馬鹿なことをやっていました。

事件簿を開いて編集する場合も、一括処理で先ず表引き対象表を共有モード且つ並べ替えを指定して開き、
続けて事件簿を開くと記述すれば良いわけですね。
共有モード使用及び表引きの構造について、実に基本的なことを解っていませんでした。

他にも債権者一覧表を作るのに表引き対象表である先ず金融機関を開く作業をやっていましたが、
債権者一覧表を開く一括処理に債権者一覧表を開く前に金融機関を並べ替え条件を指定して開く記述を入れておけば良くなります。

これは私にとっては大変な収穫でした。
有り難うございました。

13660 表引きパネルの文字数デフォルトの変更方法 小松亀一 2001/10/22-08:05
記事番号13656へのコメント
toshi-chanさん、おはようございます。

お陰様にて表引きについてこれまで不明であったことが大部モヤモヤが取れてきました。

ついでに表引きについての質問ですが、表引きパネルの検索項目と値項目の桁数の指定は出来ないのでしょうか。
表引きパネルと開いてから検索項目と値項目の桁をドラッグで大きくしても閉じると又元の大きさに戻ります。
表引き対象表の一つである金融機関.tblは結構長い名前が多いので項目桁数を大きく固定したいのですが、その方法が解りません。

環境設定やら表の表示条件やら探してみたのですが、表引きパネルの大きさの指定が見つかりませんでした。
ごく基本的なことなのかも知れませんが、宜しくお願いします。

過去BBSでは見つけることが出来ませんでした。

13661 Re:表引きパネルの文字数デフォルトの変更方法 toshi-chan 2001/10/22-08:27
記事番号13660へのコメント
小松さん、おはようございます。
解決されたようでよかったですね。

さて、今回の質問の件ですが、桐ver8sp6においてもできません。
表引きパネルのサイズの保存、データのフォントサイズの変更と保存、桁数の変更と保存などなど
できるといいな!と思うことがいっぱいありますよね。
ver9の改善テーマになっているみたいなので今後に期待しましょう。

13662 Re:表引き表の使用索引が機能しない原因は? 尾形 2001/10/22-08:44
記事番号13655へのコメント
小松亀一さん、こんにちは
骨格だけ書いてみました
参考になればうれしいです
---------------------------------------

手続き定義開始 マスタ確認()
変数宣言   整数{&更新管理}
表      "マスタ更新管理",モード=共有更新,リトライ=する,終了状態=&終了
代入     &更新管理=#IS表
ジャンプ   行番号=&端末番号/*←各クライアント識別です*/

ケース開始
  ケース ([MST得意]>0 .AND #表番号取得("C:\DATA\KIRI\MST得意")<1)
    表      "MST得意",モード=共有参照,リトライ=する,終了状態=&終了
    書き出し   枠組み,"C:\DATA\KIRI\MST得意.tbl",終了状態=&終了
    書き出し   表,"C:\DATA\KIRI\MST得意.tbl",追加,終了状態=&終了
    中止     表 編集対象表
    表      "C:\DATA\KIRI\MST得意"
    置換     /*項目計算式の再計算*/
    終了     表 編集対象表
    編集表    &更新管理
    行訂正    [MST得意]=0
ケース終了

ケース開始
  ケース ([MST商品]>0 .AND #表番号取得("C:\DATA\KIRI\MST商品")<1)
    表      "MST商品",モード=共有参照,リトライ=する,終了状態=&終了
    書き出し   枠組み,"C:\DATA\KIRI\MST商品.tbl",終了状態=&終了
    書き出し   表,"C:\DATA\KIRI\MST商品.tbl",追加,終了状態=&終了
    中止     表 編集対象表
    表      "C:\DATA\KIRI\MST商品"
    置換     /*項目計算式の再計算*/
    終了     表 編集対象表
    編集表    &更新管理
    行訂正    [MST商品]=0
ケース終了


編集表    &更新管理
終了      表 編集対象表
手続き定義終了



13663 Re:表引きパネルの文字数デフォルトの変更方法 小松亀一 2001/10/22-08:45
記事番号13661へのコメント
toshi-chanさん、おはようございます。
迅速なるレス、有り難うございます。

>解決されたようでよかったですね。
ホントにお陰様でした。

>さて、今回の質問の件ですが、桐ver8sp6においてもできません。
そうでしたか。残念ですね。

>表引きパネルのサイズの保存、データのフォントサイズの変更と保存、桁数の変更と保存などなど
>できるといいな!と思うことがいっぱいありますよね。
そうですね。ユーザーの希望を取り入れ益々使いやすいソフトになって貰いたいものです。

13664 Re:表引き表の使用索引が機能しない原因は? 小松亀一 2001/10/22-08:47
記事番号13662へのコメント
尾形さん、おはようございます。
早速のレス有り難うございます。

>骨格だけ書いてみました
>参考になればうれしいです
今は時間が無く、後でじっくり勉強させて頂きます。

取り敢えずは御礼まで。有り難うございました。
13671 Re:表引きパネルの文字数デフォルトの変更方法 尾形 2001/10/22-21:16
記事番号13660へのコメント
>表引き対象表の一つである金融機関.tblは結構長い名前が
>多いので項目桁数を大きく固定したいのですが、
[略称]という別項目を作成して表示しています
わざわざこんな事をしなくていいように
なるといいですよね。


戻る