複数PCで自動採番を行う場合 重複しない値取得するには

解決


にもにも  2008-07-24 01:49:05  No: 140119

VB6で複数PCで番号を自動採番する場合に番号の重複チェックをしたいのですが
現在は自動採番で同じ値が表示してしまいます。
思いつく方法だと
自動採番したときにDBにその番号を登録し
他のPCで自動採番が行われたらDBに同じ番号がないかチェックすると言う方法です。DBには登録しないでって言われてしまい困っています。

一時的に保存できて複数のPCから参照できる方法を知りたいです。


ひで  2008-07-24 02:02:39  No: 140120

自動番号を振るだけならば、
DBにも寄るけれど、ROWID型でもいいのでは?


  2008-07-24 02:05:13  No: 140121

>DBには登録しないでって言われてしまい困っています
また無茶な…

DBのかわりにテキストファイルを使って、Lockしながらでも
不可能では無いかもしれないが、かなり不安が残る気がする

ちなみに、基本的には自動採番する場合は
>他のPCで自動採番が行われたらDBに同じ番号がないかチェックする
というより、
採番したいアプリが採番制御情報(現在の最終番号)をLockしながら取得して、
さらに番号を1つ上げて書き込み、正常に書けたら、その番号(上げた番号)を
使う、とかするのが王道だと思う
これだとレコード件数も少なくて済むし
(採番中、他からは、ロックされているので更新等ができないので矛盾は生じないはず
  MDBなんかだと ちょっと怖い気もするが…)


にもにも  2008-07-24 02:10:31  No: 140122

DBはオラクル9iです。
複数PCで同時に登録作業を行う事が多いので自動採番時に番号がかぶると
入力しなおしというのを回避したかったのです。
番号を変更すると他の入力情報が画面から消えてしまうという仕様があるので
番号を手入力で修正できないのも参ってます。

ROWID型の使い方を調べてみます。


NIMONIMO  2008-07-24 02:23:21  No: 140123

lockするのは思いつきませんでした。今採番している時にLOCKしていないのでlockする方法を考えてみます。自動採番されたらlockして他のPCで自動採番が行われたらlockしている番号より+1した値を取得。登録完了時にLOCKをはずす。という方向でがんばってみます。ありがとうございました。>ひで さん,あ さん


魔界の仮面弁士  2008-07-24 04:42:14  No: 140124

Oracleなのですよね。「DB への登録は不可」の理由にもよりますが、
単純に SEQUENCE から NEXTVAL するのは駄目なのでしょうか?


  2008-07-24 18:46:31  No: 140125

確かにOracleならSequence使うのが常套手段かもですね
私が書いた方法はRDBでなくても使えるけど面倒だし


にもにも  2008-07-24 19:27:38  No: 140126

シーケンスを使用する方向で解決しました。みなさんありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加