- - PR -
オラクルのレコードカウントの制御
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-06-30 22:57
プログラム初心者です。
オラクル(11g)で、10個のPCで10人が、あるテーブルのデータを更新していく、システムを作成(VB2005)しています。 画面は2パターンです。 ・データ一覧表示画面 ・上記からデータを選択し、編集する用の画面 例として下記のようなデータがあります。 テーブルC 日付順 番号はユニーク 日付_番号_ステータス__レコードカウント(Rc) 1/3____1_____Q________0 1/5____2_____R________1 1/6____5_____G________2 (Rc=2) 1/7____7_____P________3 (Rc=3) 1/20__ 9_____R________4 2/1___10_____U________5 動作の流れ 1.まず、この全データをSQLで読込みます。 SELECT * FROM テーブルC ORDER BY 日付 ASC これが一覧表示画面(VB2005のグリッドビュー等)に表示されます。 2.A氏が例えば1/6のレコードを編集したいとします。 そこで、1/6(日付)の列をマウスで選択。このとき列番号(レコードカウント)は2になります。 編集画面フォームに、同じSQL(SELECT * FROM テーブルC ORDER BY 日付 ASC) と、列番号(レコードカウント)2を、引渡しします。 3.編集画面で、引き渡されたSQLを実行し、そのデータを全てDatatblに格納します。 そのデータの3つめ(レコードカウント2)を参照します。 datatabl.Rows(2).Item("ステータス") データは参照後、ある条件によりステータスが変わります。 ステータスが、"Z"になった場合、そのレコードは、テーブルAに移動されます。 4.編集後は、他のテーブルに移動する場合でも、テーブルCがそのまま更新される場合でも、 自動的に次の列のレコードに移行し編集を行う。 今回は例として、1/6のレコードのステータスが"Z"になって A氏は次に1/7(Rc3)のデータを編集作業に入ります。 5. 4.を実行するため、また同じSQLを実行。 SQL実行後、レコードカウントを次に移行すればいいのですが(Rc=2に1を加え、Rc=3とする)、 Rc=3を見ても、1/20のデータが抽出されて しまいます。 (1/6のレコードが移動してなくなってしまった場合) また、他の例として、上記と同様に、A氏が1/6のデータを編集中に、他の人が1/3,1/5のデータを編集移動 してしまった場合、レコードカウントがぐちゃぐちゃになってしまいます。 こうした多くの人がデータを編集、更新・移動する場合のテーブルを、日付順に作業させていく場合は、どのような制御 (またはオラクルの機能)をすれば、可能なのかご指導頂ければ助かります。 [ メッセージ編集済み 編集者: カズ 編集日時 2008-07-01 01:09 ] | ||||
|
投稿日時: 2008-07-01 00:10
数回読んでみましたが、私には仕様が伝わりませんでした。
例えば、
と書いてあっても、「抽出されてしまいます。」だけでは伝わりません。 作ってみたSQLを(多少ぼかしてでも)書いてみると良いと思います。 きちんと仕様を整理して、わかりやすく説明されてはいかがでしょうか。 日付とレコードカウントの関係も伝わらなかったのですが、 テーブルを移動すること、レコードカウントで連鎖している(?)ことから、 「UNION」や「階層問い合わせ」辺りじゃないかな?な予感はします。 | ||||
|
投稿日時: 2008-07-01 01:10
あしゅさんありがとうございます。助かります。
書き直してみましたが如何でしょうか。 | ||||
|
投稿日時: 2008-07-01 09:27
このテーブルには主キーはないのでしょうか?
| ||||
|
投稿日時: 2008-07-01 09:33
すいません、主キーは番号です。よろしくお願いします。 | ||||
|
投稿日時: 2008-07-01 10:23
なにをしたいのかよくわかりませんが、レコードカウントの役割はなんですか
一意識別するのであれば、番号を引き渡して更新処理をするのが普通では やりたことはレコードカウントを連番にしたいということなのでしょうか? | ||||
|
投稿日時: 2008-07-01 11:03
なかなかうまく説明できなくてすみません・・・。
文のSQLのところで、SQLを実行した内容をdatatblに格納します。 レコードカウントは、下記のRcの場所で使用しています。 work = datatabl.Rows(Rc).Item("ステータス") レコードカウントを連番にしたいというイメージですが、ようは、 日付順にレコードを更新していきたいのです。 問題なのは、日付を最初に指定できてしまうので、最初に1/6(日付)のデータを指定して更新した場合、その次に1/6以降で最近い日付を更新したいのです。そのとき、他の人が1/3,1/5を更新→レコード移動されてしまう可能性もあります。 | ||||
|
投稿日時: 2008-07-01 13:05
そうであれば レコードカウント方式をやめた方がよいのでは
更新したあと再度とりなおせば済む話では |