VB6で複数PCで番号を自動採番する場合に番号の重複チェックをしたいのですが
現在は自動採番で同じ値が表示してしまいます。
思いつく方法だと
自動採番したときにDBにその番号を登録し
他のPCで自動採番が行われたらDBに同じ番号がないかチェックすると言う方法です。DBには登録しないでって言われてしまい困っています。
一時的に保存できて複数のPCから参照できる方法を知りたいです。
自動番号を振るだけならば、
DBにも寄るけれど、ROWID型でもいいのでは?
>DBには登録しないでって言われてしまい困っています
また無茶な…
DBのかわりにテキストファイルを使って、Lockしながらでも
不可能では無いかもしれないが、かなり不安が残る気がする
ちなみに、基本的には自動採番する場合は
>他のPCで自動採番が行われたらDBに同じ番号がないかチェックする
というより、
採番したいアプリが採番制御情報(現在の最終番号)をLockしながら取得して、
さらに番号を1つ上げて書き込み、正常に書けたら、その番号(上げた番号)を
使う、とかするのが王道だと思う
これだとレコード件数も少なくて済むし
(採番中、他からは、ロックされているので更新等ができないので矛盾は生じないはず
MDBなんかだと ちょっと怖い気もするが…)
DBはオラクル9iです。
複数PCで同時に登録作業を行う事が多いので自動採番時に番号がかぶると
入力しなおしというのを回避したかったのです。
番号を変更すると他の入力情報が画面から消えてしまうという仕様があるので
番号を手入力で修正できないのも参ってます。
ROWID型の使い方を調べてみます。
lockするのは思いつきませんでした。今採番している時にLOCKしていないのでlockする方法を考えてみます。自動採番されたらlockして他のPCで自動採番が行われたらlockしている番号より+1した値を取得。登録完了時にLOCKをはずす。という方向でがんばってみます。ありがとうございました。>ひで さん,あ さん
Oracleなのですよね。「DB への登録は不可」の理由にもよりますが、
単純に SEQUENCE から NEXTVAL するのは駄目なのでしょうか?
確かにOracleならSequence使うのが常套手段かもですね
私が書いた方法はRDBでなくても使えるけど面倒だし
シーケンスを使用する方向で解決しました。みなさんありがとうございました。
ツイート | ![]() |