過去の桐井戸端BBS (桐ver.9)
30653 索引の更新みたいな事は可能ですか? しぼうかん 2005/08/02-22:14

また質問をさせて下さい。

[A],[B],2つの項目が有る"AB.tbl"があります。
[A]の項目計算式には1が入力してあります。
AB.tblには下図あの様に3レコードが入力してあります。
その後[A]を整列項目,整列順が昇順の索引=整列Aを設定し、
その索引を利用する並べ替え条件=整列Aを設定しました。
※この時点ではまだ整列していません。

作業1
表編集状態で[B]に2が入力してある2行目のレコードを
一旦行移動で3行目へ移動させる。(図い)
その後すぐにその行[B]に2が入力してあるレコードを行移動で
2行目に戻し、(図あ)の状態に戻す。

作業1を行った後に並び替え条件=整列Aを実行すると
あら不思議(図い)の様に並び替えられてしまいます(?_?)

作業の結果から想像するとファイルの内の索引記録部分には特定の
レコード操作(行移動や行挿入など)をしたレコード順(入力順では無い)を記録する場所があり、
その記録は作業1〜3の様なある特定の操作を
行う事で索引が更新されると考えました。

上記の仮定が正しいという事を前提に質問なんですが、AB.tblを
編集対象表とするAB.wfmのイベントでAB.tblの索引名=整列Aを
更新する自然な方法はありますか?

※注
イベントで索引と並び替え条件を一旦削除し再登録することで
索引の更新は可能だと思いますが、あまりに不自然なので
もう少し自然な方法が無いかな?と思いました。


(図あ)       (図い)

A|B|     A|B|      
1|2|     1|2|
1|4|     1|6|
1|6|     1|4|

30654 補足追加情報。 しぼうかん 2005/08/02-22:24
記事番号30653へのコメント
こちらはNo30653の作業1以外で索引が更新されたり、されなかったりする
作業を幾つか書いてみます。

作業2
定義画面に切り替えて[A]の項目計算式に入力してある1を消します。
そして表編集画面に戻します。(図あ)の状態です。
そこで並び替え条件=整列Aを実行します。
するとやはり(図い)の様に並び替わります。
さらにもう一度定義画面に切り替えてから今度は[A]の
項目計算式に一番最初に入力してあった様に1を入力します。
そして表編集画面に戻します。(図あ)の状態です。
そこで並び替え条件=整列Aを実行すると今度は(図あ)の様に
並び替わります(?_?)
・・・つまり最後の作業で索引が更新された?


作業3
なおAB.tblの全レコードが[B]が2と[B]が6の2行しか無かった場合に、
[B]が2の行と[B]が6の行、つまり1行目と2行目の間に[B]が4の
レコードを行挿入した場合も並べ替えをする前は(図あ)と同様に
表示されますが並び替え条件=整列Aを実行すると(図い)となってしまいます。
・・・つまり索引が更新された?

作業4
並べ替えを実行すると(図い)になってしまう並べ替え条件=整列Aが
登録してあるAB.tblに[A][B]以外に項目[C]があった場合、
表定義画面に切り替えてこの[C]を削除して表編集画面に切り替えた後に
"並べ替え条件=整列A"を実行すると今度は(図い)と表示されます。
・・・つまり索引が更新された?

30655 Re:索引の更新?みたいな事は可能ですか? うにん 2005/08/02-23:07
記事番号30653へのコメント

>作業1を行った後に並び替え条件=整列Aを実行すると
>あら不思議(図い)の様に並び替えられてしまいます(?_?)

索引が更新されるかどうかというよりも、整列順に指定されてる
項目の値が同じ行の順番がどうなるかは、「不定」でしょう。
もちろん内部処理から考えて必然的な並び順は存在するでしょうが、
そこは公開されていませんから考えても無駄です。

以前、整列を指定せず結合したら元の表と全く逆順になった例があったと思います。

30659 Re:索引の更新?みたいな事は可能ですか? コルネ 2005/08/03-13:21
記事番号30653へのコメント
Windows版からは桐の索引は全て自動保守です。
また、複数の項目で整列させる場合には、複数の整列項目を指定する必要があります。
30665 Re:索引の更新?みたいな事は可能ですか? しぼうかん 2005/08/03-18:07
記事番号30655へのコメント

>索引が更新されるかどうかというよりも、整列順に指定されてる
>項目の値が同じ行の順番がどうなるかは、「不定」でしょう。
>もちろん内部処理から考えて必然的な並び順は存在するでしょうが、
>そこは公開されていませんから考えても無駄です。

うにんさん、早速の回答ありがとうございます。
いつものごとくうまく意志が伝えられなかったようなので
もう一度説明します。
"普通"に索引を使った整列を実行した場合、整列項目が
同じ場合の並び順に関しては「不定」という事で納得して
最初に索引を使った場合の並び順の規則を追及するつもりはないのです。

例えばAB.tblに作業1を行った後に整列を解除すると図あ
(見た目上の並び順)の状態になります。
またAB.tblに作業1をしないで代わりに作業6(2行目の
レコードを先頭レコードに行移動してその後2行目に戻す。)
をして整列Aを実行すると(図う)のようになります。
これを整列解除すると(図あ)の状態に戻ります。

作業1をした場合のAB.tblも作業6をした場合のAB.tblも整列を
しない状態では共に(図あ)の状態であります。
そしてAB.tblに対して作業1をしたのか作業6をしたのか解らない場合は
整列Aを実行した場合にAB.tblが(図い)の並びになるのか
(図う)の並びになるのかわかりません。

つまり並び順の予想が「不明」の状態です。
しかし、このAB.tblを編集対象表とするAB.wfmにコマンドボタンを作り
左クリックイベントに

索引削除 並べ替え条件削除 = しない,整列A
索引定義 索引名="整列A",{[A]昇順}
並べ替え 索引名=整列A

と書けばいくつもの並び順が予想される「不定」の状態から
[A]が同じ場合は見た目上の並び順に整列される、という確実な
一つの並び順になるのではないかと推測しています。

さてこれからが質問部分なんですがこの推測は間違っているのでしょうか?
そしてこの推測が当たっているなら索引削除と索引定義と使うこの方法以外に
もっとスマートな方法はないのでしょうか?というのが質問なのです。


(図う) 
A|B|
1|2|
1|6|
1|4|

30666 Re:索引の更新?みたいな事は可能ですか? しぼうかん 2005/08/03-18:17
記事番号30659へのコメント
>Windows版からは桐の索引は全て自動保守です。
>また、複数の項目で整列させる場合には、複数の整列項目を指定する必要が
>あります。

コルネさん返信ありがとうございます。
ただちょっと回答の意味がわかりません。
今回の質問は簡単に言うならば整列項目が同じ場合の並び順を
見た目上の並び順に出来ないか?という質問です。
30670 Re:索引の更新?みたいな事は可能ですか? うにん 2005/08/03-20:24
記事番号30665へのコメント

>索引削除 並べ替え条件削除 = しない,整列A
>索引定義 索引名="整列A",{[A]昇順}
>並べ替え 索引名=整列A
>
>と書けばいくつもの並び順が予想される「不定」の状態から
>[A]が同じ場合は見た目上の並び順に整列される、という確実な
>一つの並び順になるのではないかと推測しています。

「見た目上の並び順」というのは基本状態のことを言っていると思いますが、
「それを期待してはいけない」というのが「不定」ということです。

>さてこれからが質問部分なんですがこの推測は間違っているのでしょうか?

「不定」というのも一般的な話で桐の仕様として「不定」と書いてあるのを
見たわけではありません。
内部仕様の話なので正しいかどうか知ることはできないということです。
管理工学に聞いて見れば?

そもそも、データに変更があるたびいちいち全レコードの索引を作り直すより、
整列したい順に連番でも振っておけば自動保守で何の問題もありませんが。

30672 見た目上の並びとは 佐田 守弘 2005/08/03-21:40
記事番号30666へのコメント
しぼうかん
 >今回の質問は簡単に言うならば整列項目が同じ場合の並び順を
 >見た目上の並び順に出来ないか?という質問です。
の意味が良く分りません。

整列索引は昔で言う自動保守機能によって自動的に更新され、この索引を使った
並べ替えを定義しておけば、自動的に並べ替えも行われ、データが更新されれば
自動的に並び替えも訂正される事は理解されている事と思います。

さて、上記の見た目上の並びの意味が良く分らないのですが、あるいは見た目上は同じでも、
データそのものが違うために、見た目で考えている順序にならんでいないのではという気がします。

いくつかの具体例で言えば、
@長音記号「ー」とマイナス符号「−」の混用
 (類似の似た様でいて全く異なる文字の混用が考えられます)
A不要なスペースの存在
B半角文字と全角文字の混用
その他にも、予期していない原因がデータの上にあるかも知れません。
見た目通りにならんでいないデータをチェックしてみて下さい。

佐田守弘(KS-00119)
30673 Re:索引の更新?みたいな事は可能ですか? 悲しげ 2005/08/03-22:07
記事番号30653へのコメント
今回のしぼうかんさんの質問の趣旨は、半分くらいしか読みとれていません
ので、全く外している可能性大の、少々ずれたコメントをさせて戴きます。

索引を利用した整列状態では、行移動はできませんから、しぼうかんさんが
行った行移動は、おそらく並べ替え解除状態、すなわち基本状態でだろうと
思います。で、基本状態で行移動させた場合に、その並びは、再度索引を利
用して整列させた時に、期待通りに反映されないことがままあります(特に、
整列の対象とする項目がひとつ〜少しだった場合)。
その理由については、ま、見方によっては当然だろうな、とは想像している
のですが、そしてその理由については割愛させて戴きますが、私が以前よく
やった対処方法を書きます。
それは、基本状態で行移動させた後には必ず表整理を実行する、と云うことです。
こうすれば、索引を利用した並べ替えに反映できたと記憶します。

このような過程を経たくなければ、#30659でコルネさんが仰るとおり、
関係する複数項目について並び順を設定するのがよいでしょう。そうすれば線形的に
(って言葉の意味は合っているだろうか?)並び替えが成立するし、
その方が確かにデータベースっつー感じもします。

以上、論点が全然外れていれば、無視して下さい。(*^_^*)

30681 **の順番 コルネ 2005/08/04-13:40
記事番号30666へのコメント
人間社会でもデータベースでも「**の順番」は意味が通じますが、
ただ「順番」では意味不明で結果は『不定』です。

「順番に整列しろってんのに、なんで言ったとおりにしないんだ」
相手は意味が通じずに「ポカーン」

「**の順番」に整列した結果を得たければ、データベースに**を
伝えなければなりません。
「順番」だけでは結果は『不定』です。
30688 Re:**の順番 コルネ 2005/08/04-15:40
記事番号30681へのコメント
うにん さんのコメントと内容がダブっていますね。
良く読まずに書いて済みません
30694 Re:索引の更新?みたいな事は可能ですか? しぼうかん 2005/08/04-18:54
記事番号30670へのコメント
見た目上の並び順というのは基本状態の事です。
※この表現が思いつきませんでした

>「それを期待してはいけない」というのが「不定」ということです。

管理工学で聞いてみました。※最初に聞いて見ればよかったです。m(_ _)m
索引の削除と定義をすると索引を設定した項目以外の並びは基本状態の
並びが優先されるようです。

>そもそも、データに変更があるたびいちいち全レコードの索引を作り直すより、

たしかに索引を作り直すのは変だと思いました。
そこで他にもっと良い方法がないかと今回の質問をしました。

>整列したい順に連番でも振っておけば自動保守で何の問題もありませんが。

実は最初は知りたい事は索引で並べ替えがしてあるサブフォームへの
行挿入をどうやってするか?という事でした。
それをする一つの方法として連番を振る事も考えたのですが
その方法がわからなかったので今回の方法で質問をしました。
しかしうにんさんや他の方々も整列用の別項目を作るやり方の方が
"普通"だというニュアンスの回答を頂いたのでその方向で検討してみます。

幸い過去ログでこんな投稿を見つけました。
http://www.fuku3.com/~habata/kbbs/kakov8/10297.htm
この中で桐野港さんが書かれている方法が連番を振る方法として
使えそうなのでこの連番を振る方法を試してみます。

ありがとうございました。

30695 Re:見た目上の並びとは しぼうかん 2005/08/04-18:55
記事番号30672へのコメント
>さて、上記の見た目上の並びの意味が良く分らないのですが、

佐田さん回答ありがとうございます。
いつもながら文章表現がまずくてすいません。
見た目上の並びとはうにんさんが看破したとおり、基本状態の事でした。

30696 Re:索引の更新?みたいな事は可能ですか? しぼうかん 2005/08/04-19:02
記事番号30673へのコメント
>今回のしぼうかんさんの質問の趣旨は、半分くらいしか読みとれていません
>ので、全く外している可能性大の、少々ずれたコメントをさせて戴きます。

悲しげさん、前回に続き今回も回答ありがとうございます。
回答は全く外れてはいません。表整理をした後に並び替えをしてみたところ
希望通り(整列項目が同じ場合は基本状態の並びが優先)に整列出来ました。

管理工学に聞いてみたところ表整理をすると全ての索引が作り直されるので
整列項目が同じ場合の並びは基本状態の並びが優先されるようです。

また表整理よりも指定した索引だけを削除してもう一度登録する方が
処理が早いそうです。

>このような過程を経たくなければ、#30659でコルネさんが仰るとおり、関係
>する複数項目について並び順を設定するのがよいでしょう。そうすれば線形
>的に(って言葉の意味は合っているだろうか?)並び替えが成立するし、そ
>の方が確かにデータベースっつー感じもします。

という訳で索引削除と索引定義でやる方法で問題は無いようなのですが
"標準","普通"好きの自分としては悲しげさん初め皆さんが書かれている通り
整列項目を作って整列する方向で考えてみます。

30697 Re:**の順番 しぼうかん 2005/08/04-19:04
記事番号30688へのコメント
うにんさんや悲しげさんの投稿を見ていてやっと意味が分かりました。
別に整列項目(今回の例でいうと[B]を希望通りに整列させる項目)を作って
その項目を含めて索引を作るという事ですね。

コルネさんや他の皆さんは別に整列項目を作る方法をおすすめなので
その方向でやってみることにしました。
ありがとうございました。

30737 Re:索引の更新?みたいな事は可能ですか? V30 2005/08/07-08:37
記事番号30653へのコメント
>作業1
>表編集状態で[B]に2が入力してある2行目のレコードを
>一旦行移動で3行目へ移動させる。(図い)
>その後すぐにその行[B]に2が入力してあるレコードを行移動で
>2行目に戻し、(図あ)の状態に戻す。

この時に、表整理で余白割合=0をやってみてください。
もしかすると、うまくいくかもしれません。
MS-DOSの桐の話で恐縮なんですが、同じような経験があって、移動をした後、
並び替えをしたら、並び替え条件どおりにならないことがありました。
何回やっても、並び替え条件どおりにならない。
そこで、移動した後、表整理してから、並び返したらうまくいったという経験があります。
それから並び替えを行う前に移動をさせた場合は、必ず表整理を行ってから
並び替えをするようにしています。
これに当てはまるのかな?と思って、カキコしました。
間違ってるかもしれないけどね。

30739 Re:索引の更新?みたいな事は可能ですか? V30 2005/08/07-08:43
記事番号30655へのコメント
>>作業1を行った後に並び替え条件=整列Aを実行すると
>>あら不思議(図い)の様に並び替えられてしまいます(?_?)

だから、移動したからですよ。
表整理してから、整列をかけてみてください。
うまくいくはず。

30740 Re:索引の更新?みたいな事は可能ですか? V30 2005/08/07-08:51
記事番号30673へのコメント
>その理由については、ま、見方によっては当然だろうな、とは想像している
>のですが、そしてその理由については割愛させて戴きますが、私が以前よく
>やった対処方法を書きます。
>それは、基本状態で行移動させた後には必ず表整理を実行する、と云うこと
>です。こうすれば、索引を利用した並べ替えに反映できたと記憶します。

僕は、理由はまったく分かんなかったんだけど、はまったあげく表整理で解決したことがあります。
あれは焦ったよ。会社での業務だったから(笑)。
ずーっと大昔のことだけどね(^^ゞ
それから、行移動でデータを訂正した場合は、必ず表整理してから、整列をかけるようにしました(笑)。

30764 Re:索引の更新?みたいな事は可能ですか? しぼうかん 2005/08/07-22:25
記事番号30737へのコメント
V30さん、返信有り難うございます。
同じように困った人は結構いるのかもしれませんね。
ちなみに表整理は余白割合が何でもうまくいきました。

ただ今回はレコードに並び順を決める整列項目を追加して
処理する方法でやってみる事にしました。

戻る