過去の桐井戸端BBS (桐ver.8)
4070 フォームオープン時の「並べ替え」を早くしたい こまった君 2000/1/4-17:04
ま〜たまた、困ってしまいました。どなたかお助けを! (T_T)
表編集にて「索引」と「並び替え」を作成(顧客コードという同じ項目)して
「属性」−「表の表示条件」−「開始時に使用する並べ替え条件」に並べ替え
条件を登録しました。
すると、次回に表を開いたときは「並替中」という表示もなく、すぐに整列され
た状態で表は開くのですが、フォームを作成して開くと並び替えがされずに表示
されます。(フォーム上では「開始時に使用…」は効かないのですね。)
そこで、フォームの「編集対象表」−「表の操作」にて「開始条件種別」に
「並び替え」を指定したのですが、今度はフォームを開くと「並替中」が出て
すぐには表示されません。(ファイルが大きいので、すごく時間がかかります)

フォームを開いたとき、「並べ替え」を行わせず、整列された状態ですぐに表示
させる方法はありませんか?

バージョンは「Ver.8(SP3)」です。
よろしくお願いいたします。      (ToT)

4072 フォーム開始時の「並べ替え」 佐田 守弘 2000/1/4-22:50
記事番号4070へのコメント
こまった君さん
ご質問の件は、フォーム開始時の条件として、整列索引による並べ替え条件を指定した
が、索引が使われていないとの事ですね。

私も整列索引が設定してある並べ替えを指定すれば、索引が使用されると思っていたの
ですが、なぜだめなのでしょうね。

とりあえず次善の策になりますが、イベントハンドラで次の様な並べ替えを行ってみて
はいかがでしょうか。

イベント:フォーム開始イベント
コマンド:並べ替え 索引名=<索引名>

つまり、フォームを開始する時に、索引による並べ替えを行わせるわけです。
ただし、タイミング的にうまく行くかどうかが、ちょっと自身がありません。イベント
が実行される時に表が開かれていなければならないわけなのですが、もしだめでした
ら、遅延コマンドでごくわずかの時間遅れを入れてみて下さい。

佐田守弘(KS-00119)

4078 Re:フォーム開始時の「並べ替え」 こまった君 2000/1/5-15:57
記事番号4072へのコメント
佐田先生、レスありがとうございます。

>ご質問の件は、フォーム開始時の条件として、整列索引による並べ替え条件を指定した
>が、索引が使われていないとの事ですね。

そうです、その通りです。(^^;

>私も整列索引が設定してある並べ替えを指定すれば、索引が使用されると思っていたの
>ですが、なぜだめなのでしょうね。
>
>とりあえず次善の策になりますが、イベントハンドラで次の様な並べ替えを行ってみて
>はいかがでしょうか。
>
>イベント:フォーム開始イベント
>コマンド:並べ替え 索引名=<索引名>
>
>つまり、フォームを開始する時に、索引による並べ替えを行わせるわけです。
>ただし、タイミング的にうまく行くかどうかが、ちょっと自身がありません。イベント
>が実行される時に表が開かれていなければならないわけなのですが、もしだめでした
>ら、遅延コマンドでごくわずかの時間遅れを入れてみて下さい。

おっしゃる通りにイベントを作成してみましたが、やはり
 コマンド:並べ替え 索引名=<索引名>
を実行すると「並替中」になってしまいます。
いまいち自分の中でも「索引」と「並べ替え」の違い・使い方・長所短所が理解できて
いません。(Ver.5の時と、どのように違うのかが解かればと思います)

自分なりに試行錯誤してみます。(というよりk3に聞いてみます…)  (ToT)

4081 Re:フォームオープン時の「並べ替え」を早くしたい HAS 2000/1/5-19:24
記事番号4070へのコメント
>そこで、フォームの「編集対象表」−「表の操作」にて「開始条件種別」に
>「並び替え」を指定したのですが、今度はフォームを開くと「並替中」が出て
>すぐには表示されません

索引定義で「登録時に並べ替え条件も作成する。」にチェックをいれるか、
並べ替え条件作成時に「索引を使用する」を選択すると、問題無く出来ます。


4087 フォーム開始時の「並べ替え」 佐田 守弘 2000/1/5-22:59
記事番号4078へのコメント
こまった君さん
フォーム開始時の並べ替えについて確認して来ました。

フォーム開始条件での並べ替えでも、整列索引が設定された並べ替えを指定した場合には、索引を
使った並べ替えが行われる仕様になっているそうです。

索引が使われない並べ替えが行われるとしたら、その原因として、選択や絞り込みの状態など索引が
使えない状態にある事が考えられます。

この選択や絞り込みの状態の中には、フォームによるグループかも含まれます。つまり、ヘッダや
フッタにグループ項目を設定してあると、そのグループ項目によるグループ選択の状態になります。
この状態で並べ替えを行うと、グループ選択の状態からの並べ替えになるので、整列索引が利用でき
ません。この点について、ご確認下さい。

●グループ化するフォームを使うなら
並べ替えを行わなくても済む様に、予めデータを並べておくのが1つの方法でしょうね。
並べ替えを行って別の表に書き出し、全行削除してから書き出した表から再び読み込みます。
行数があっている事を確認してから、表整理を行って下さい。
念のために、バックアップを取ってから行う事をお薦めします。

佐田守弘(KS-00119)

4094 答えは「共有」でした! こまった君 2000/1/6-12:45
記事番号4081へのコメント
みなさん、ありがとうございます。
佐田先生の回答をヒントにいろいろ試してみた結果
「共有=する」でオープンしたときは、必ず「並べ替え」が
行われるようです。(「共有する」でオープンしていました)

でも、他のクライアントが整列項目に対して修正・追加を
行ったときに、リアルタイムで索引が更新されれば毎回開く
時に「並べ替え」を行わなくても良いのではと思うのですが。
(インデックス領域とデータ領域がファイルの中で分かれて
 いれば可能なように思うのですが?ん〜わからん…)

仕様なので、しようがないですね… (^^;
早くなる何か別な方法を考えて見たいと思います。(T,T)

4104 共有の時には整列索引は使えないでしょうね 佐田 守弘 2000/1/7-00:21
記事番号4094へのコメント
こまった君さん
共有モードでしたか。それだと整列索引は使えないのは仕方ないですね。
仕様だからと言うよりも、その様な仕様にしなければとんでもない事が起きてしま
います。

>他のクライアントが整列項目に対して修正・追加を
>行ったときに、リアルタイムで索引が更新されれば

ですが、表データは1つを複数人で共有、インデックスはクライアント毎に作ると
いう訳には行かないでしょう。そんな事をしたら、データとインデックスの整合性
が取れなくなってしまいます。
というか、整合性が取れていないインデックスが整列索引ではなく、並べ替えの内
部的なインデックスなんですね。実際にそうなっているかは想像でしかないのです
が、元に戻せる並べ替えを行うには、多分、桐ver.5にあった自動更新しない索引の
様なものが作られるはずと考えます。当然、これはクライアント毎に作られるはず
です。

では、1つの共有するインデックスをリアルタイムに更新したらどうなるでしょう
か。答は簡単ですね。誰かが更新した途端に、他のユーザーの表の並び順も並べ替
えられてしまいます。
勝手に並べ替えられてしまったら、編集中、あるいは印刷中のレコードが入れ替
わってしまう事になります。これでは他のユーザーが困るわけですから、リアルタ
イムにインデックスの更新はできないと思います。

●他のデータベースではどうなのか
整列索引による表の並べ替えは、桐独特の機能ではないでしょうか。Accessにして
も、五郎にしても、並べ替えとは表のレコードの順序を本当に並べ替える機能で
あって、索引による一時的な並べ替え状態を作るものではないと思います。
(かつてのdBASEはインデックスで並べ替え状態を作ってました)

●本来はどうすべきなのか
本質的な解決方法ですが、表そのものを編集するのではなく、クエリーつまり結合
表で必要なレコードを抽出し、並べ替えも行ったものに対して編集するのではない
かと考えます。多分、これがAccess流の「由緒正しい」データベースの使い方にな
るはずです。
つまり、編集する1つの表だけを結合対象表とした結合表を作成し、抽出条件と並
べ替え条件を設定します。
ただし、これで早くなるのかどうかは分かりません。一般的に言えば、クエリー
(結合)の実行に多少の時間が掛るし、データベースとしてはそれは当然必要にな
る処理時間です。

佐田守弘(KS-00119)

戻る