過去の桐井戸端BBS (桐ver.9)
26026 図書台帳で全体の連番と分類別連番をつけたい teteru 2004/04/23-11:23
はじめまして、TETERUです。
EXCELで作ってある図書台帳(登録件数1000件)を、桐9に乗せ変えようとしています。

以前の登録データの更新をせずに、
新規登録データの入力時に自動的に連番をつけれるようにしようとしていますが、
2つの連番があってうまくいきません。

具体的に書きますと、[登録番号][分類][図書番号][書名]があります。
登録番号は、全体の連番で、図書番号は、分類別の連番になっています。
これらの連番には、欠番と枝番があります。

登録番号は、[直前値]+1 で、作っています。
図書番号は、表引きで、 MAX+1.tbl から[分類]を参照して、図書番号を入れています。
しかし、入力後にmax+1.tblの参照した図書番号に +1 する方法がわかりません。
どなたか、教えていただきませんか。

また、他の方法で2つの連番をつける方法があれば教えてください。
26037 図書台帳(1)枝番による問題 佐田 守弘 2004/04/24-09:07
記事番号26026へのコメント
teteruさん
まず先に確認させて頂きますが、
 >これらの連番には、欠番と枝番があります。
と書かれていますが、欠番の方は致し方ないとして、[登録番号]と[図書番号]の両方とも、枝番があるのでしょうか。
そしてこの枝番は、過去のものは致し方ないとだけするのか、今後とも枝番を使う必要があるのかどうかは、いかがでしょうか。

実の所、枝番があるかどうか、特に全ての番号に枝番があるのならまだ比較的簡単ですが、
枝番を持つものと持たないものが混在している場合には、かなり面倒な話になりそうに見えます。

私の推定ですが、登録番号の方は、枝番なしで次々に新しい連番が発生するので構わないが、
図書を廃棄すると欠番になるので欠番は許可する。
図書番号の方は、全集ものについて枝番が過去に使われていた。
ではないかと思うのですが。

●枝番のデータの持ち方の問題
枝番をどの様に持つかですが、「1234-01」の様にハイフォンを使って記述するとなると、
文字列として扱わなければならなくなってしまい、番号の自動生成が難しくなります。
ここでは図書番号のみが枝番を持つと仮定しますが、もし自動生成させるのであれば、
[図書番号]、[図書枝番]という様に、2つの項目に分けておく方が良いかも知れません。
あるいは、図書番ごを整数ではなくて数値とし、枝番は小数で持つのも1つの考え方ではあります。

●枝番の自動発生の問題
枝番があると、次の番号を自動生成させる際に、図書番号をインクリメントするのか、
枝番をインクリメントするのか、図書番号の方をインクリメントするのかの自動判断が困難です。

もし自動発生しようとしたら、まず先に全集ものか単行本かの選択を入力し、
全集なら枝番をインクリメントする、単行本なら図書番号をインクリメントするといった
判断をする必要があるかと思います。

その様な面倒を排するために、今までの枝番はしかたがないとして、
今後は枝番なしで処理できるのかどうかが、大きな分かれ目になりそうです。

佐田守弘(KS-00119)
26038 図書台帳(2)番号の自動生成に関して 佐田 守弘 2004/04/24-09:41
記事番号26026へのコメント
別コメントの枝番の問題が解らないので、的確な回答にはなりません。
ここでは枝番の問題を際に置いて、ひとまず連番号を自動生成する事に関して
いくつかの案を述べます。

●登録番号の自動生成
登録番号は、常に新しい連番号を発生させ、同じ番号を2度と使わない事に意味が
あるのだろうと思いますから、カウンタ型のデータにしてみてはどうでしょうか。
あるいは整数型として、現在の様に直前値+1とし、重複禁止の索引を設定しておくのでも構いません。

●図書番号で最大値を表引きする方法について
 >図書番号は、表引きで、 MAX+1.tbl から[分類]を参照して、
 >図書番号を入れています。
と書かれていますが、おそらく枝番があるためにこの様な方法を使っておられるのでしょうね。
実の所、最大値を記入している表を自動的にインクリメントする方法はありません。
従って、それが必要ならその仕組みを一括処理やイベントで作る事になります。

●最大値の表を開いてその値を持って来る
表編集では難しいのですが、フォームとイベントを使うなら可能です。
分類の入力の際に、最大値の表を表示するフォームをフォーム呼び出しで開き、
この中から分類の選択をします。
選択した分類の値、番号の最大値を変数に取り込みます。
そして、この分類を入力する図書データの分類の初期値に設定し、最大値+1を図書番号の初期値にせっていします。
初期値の設定には、入力前イベントを使うのが良いでしょう。

そして、図書データの入力が確定したら、図書番号の最大値を最大値の表に書き込みます。
これはソース値更新イベントを使い、書き込んだ図書番号の値を変数に取り込んでから、
最大値の表を開いて、この値を書き込む処理になります。
しかし、登録後にそのデータを削除した場合には、別の問題として残ります。

●最新の最大値を取るなら
図書台帳の表を分類をグループ項目として行集計を行えば、最大値の表と同じものが得られます。
これを最大値の表に書き出せば良いわけです。
しかし毎回この処理を行っていると、おそらく処理時間が掛ってしまい、
大変だと思います。
ですから、起動時や終了時に行うとか、あるいは行削除した後に行うという様にするのが良いかと思います。

佐田守弘(KS-00119)

26040 Re:図書台帳(1)枝番による問題 teteru 2004/04/24-10:52
記事番号26037へのコメント
佐田さん、ありがとうございます。

枝番は、図書番号にあり、全集などについてあります。
具体的には、[図書番号]に"123 1/3""123 2/3""123 3/3"と書いてあります。
桐へデータを、取り込んだ際に、"123.1""123.2""123.3"にかえています。
枝番は、小数点で回避しようとしています。

今後の運用では、枝番は作らない方向で考えています。

アドバイスをお願いします。   TETERU

26042 Re:図書台帳(2)番号の自動生成に関して teteru 2004/04/24-11:46
記事番号26038へのコメント

佐田さん、ありがとうございます。


登録番号は、カウンタ型は、入力時に数値が表示されないので、直前値+1としました。
カウンタ型についても考えてみます。


表編集での入力を考えていたのですが、無理なようなのでフォームとイベントで考えてみます。

教えていただいたとうり、フォーム呼び出し、入力前イベント、ソース値更新イベントで、試してみます。

実は、イベントは昨日から桐のhelpを読んで勉強しています。
helpのサンプルの jusho.wfm を参考にして試してみます。

3つのイベントができれば、データをさく除した場合の max+1.tbl の更新イベントにも取り組んでみます。

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


戻る