- - PR -
ROWSTATEの変更
投稿者 | 投稿内容 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-10-17 13:12
Jittaさん、重ね重ねありがとうございます。
少し環境が伝わっていませんでした。 まず、テーブルは3つです。 伝票入力テーブル(データは伝票+行ごと) 伝票入力ログテーブル(データは伝票+行ごと 加えて訂正前と訂正後) 集計テーブル(データは品番ごと) それと伝票入力ログテーブルは更新日付欄は最新の日付をセットします。 集計テーブルもSUMすればよのかもしれませんが 件数が多い為、集計した形で持っています。 伝票入力ログテーブルは、1日にいろいろ 新規入力があったり、修正があったりします、 それら1日の動きをテーブルにもち 最後に集計テーブルに更新していきます。 ご理解いただけたでしょうか? | ||||||||||||||||||||||||||||
|
投稿日時: 2007-10-17 20:58
どういう状態にあるデータが、
どの操作によって(今分かっているのはこれ)、 どういう状態になるのか。 操作の前後、少なくとも後が分からなければ、結果を出すための操作方法を提示できないのですけど...
こんな感じ? 集計テーブルは、 「SELECT 品種, SUM(数量) FROM 伝票入力テーブル GROUP BY 品種」 な感じで作れるんじゃないかなぁ? (SQL 文忘れてる orz) 伝票入力ログテーブルも、ログテーブルに対しては追加しかしないなら、訂正前を記録する必要はないですよね? 「種別」に、「追加…A」「削除…D」「更新…U」を記録しておけば、例えば「伝票No 1 の 2 行目を、『B を 4個』から『D を 3個』書き換えた」時には、
という行を追加します。修正前は、すでに記録されているので、いらないですよね? 操作後は、このようになります。
LANVINさんがおっしゃっているのは、この、最後の行を2行追加したい、ということですよね?その内容は、どのようなもので、追加した結果はどうなりますか? 私がイメージしているのは、次の2行を追加するようなものです。これは、意味がないと思います。
なんとなく、結果が分からないものを作ろうとしているんじゃないか、と思うのですが、いかがでしょう? 例えば、仕様書に 「伝票を更新したときに、修正した内容をログに記録する。」 と書かれていると書かれていて、これから 「4 を 3 に変えたから、修正前の 4 と 3 を記録しなければならない」 と思いこんでいる。でも、実際のものがどう動くかは、イメージできていない。 そんな感じがします。 | ||||||||||||||||||||||||||||
|
投稿日時: 2007-10-18 16:11
私は以下のような処理だと思っていました。
この処理だと集計テーブルの更新で参照すべきデータを最小にできると思います。 また、トラブルが発生した場合、集計テーブルを特定の業務日の状態に戻すことも 容易になります。 2007/10/18の業務開始時の集計テーブルの状態を以下のものとして
2007/10/18の業務で以下の伝票を新規入力
上記処理によって、伝票入力テーブル、伝票入力ログテーブルは以下のように更新される
2007/10/18の業務終了後、伝票入力ログテーブルの更新日付が「2007/10/18」のデータ を集計し、その結果を集計テーブルに加算することによって、集計テーブルを更新する
翌日(2007/10/19)の業務で以下の伝票を修正
上記処理によって、伝票入力テーブル、伝票入力ログテーブルは以下のように更新される
2007/10/19の業務終了後、伝票入力ログテーブルの更新日付が「2007/10/19」のデータ を集計し、その結果を集計テーブルに加算することによって、集計テーブルを更新する
[ メッセージ編集済み 編集者: ゆうじゅん 編集日時 2007-10-18 16:18 ] | ||||||||||||||||||||||||||||
|
投稿日時: 2007-10-18 19:12
ゆうじゅんさん:
なるほど つうか、LANVINさんから、それを出して欲しかった | ||||||||||||||||||||||||||||
|
投稿日時: 2007-10-18 19:39
ゆうじゅんさん
そして、Jittaさん どうもすいません。 まさにゆうじゅんさんの言われる通りです。 伝票テーブルの変更前と後に AcceptChanges SetAdded しDataTableを何とか 追加状態に伝票入力ログテーブルを更新しようと思います。 | ||||||||||||||||||||||||||||
|
投稿日時: 2007-10-18 22:31
こんばんは。
先程はすごいRESありがとうございました。 書き漏れがありました。 コード: ------------------------------------------------------------------------------- 伝票入力テーブル 伝票No 行No ... 品種 数量 更新日付 1 1 ... A 1 2007/10/18 1 2 ... B 5 2007/10/19 ← 更新 1 3 ... C 2 2007/10/18 2 1 ... B 2 2007/10/18 × 2 2 ... C 1 2007/10/18 ← 削除 伝票入力ログテーブル 伝票No 行No ... 品種 数量 更新日付 1 1 ... A 1 2007/10/18 1 2 ... B 4 2007/10/18 1 3 ... C 2 2007/10/18 2 1 ... B 2 2007/10/18 2 2 ... C 1 2007/10/18 1 2 ... B -4 2007/10/19 ← 新規 1 2 ... B 5 2007/10/19 ← 新規 2 2 ... C -1 2007/10/19 ← 新規 ------------------------------------------------------------------------------- というRESを頂きました。 伝票入力テーブルのDataTableをCopyして 伝票入力ログテーブル更新用のDataTablを作成しますが 上記の「← 新規」でありますように 伝票入力ログテーブルは必ず新規なのです。 だから伝票入力テーブルのDataTableをCopyしたあと このスレッドのテーマでありました、必ずAdd状態にしたいので 更新前はDataTableのRowStateは変更無しであるため SetAdded出来ます。 画面入力内容を伝票入力テーブルのDataTableにセットした後 更新後用の伝票入力ログテーブルにCopyし またRowStateをAdd状態にしたいのですが × 2 2 ... C 1 2007/10/18 ← 削除 この分の更新後用の伝票入力テーブルのDataTableは いらないのです。 そのため伝票入力テーブルをUpdateした後 更新後用の伝票入力ログテーブルにCopyし またRowStateをAdd状態しましたが、 変でしょうか? 伝票入力テーブルをUpdateする前だと DELETE状態のためSetAddedでエラーになってしまうからです。 AcceptChanges SetAdded なかなか厄介です。 | ||||||||||||||||||||||||||||
|
投稿日時: 2007-10-19 07:14
ごめんなさい 途中で送ってしまいました 伝票入力用から、集計用、ログ用のそれぞれへコピーする じゃなく? 投稿ごとに言葉が変わってませんか?更新後用って、なんですか? お願いだから、投稿する前に見直して できれば、他人、可能なら上司に読んでもらってから投稿して... もひとつ テーブルまるまるコピーしたらダメですよね? 指摘し忘れてたけど、そういうコードがここにあがってますよね? 変更があった行だけ抜き出してコピーしなければいけないんじゃないですか? [ メッセージ編集済み 編集者: Jitta 編集日時 2007-10-19 07:27 ] | ||||||||||||||||||||||||||||
|
投稿日時: 2007-10-19 19:44
Jittaさん、長いお付き合いありがとうございます。
1 更新前はDataTableのRowStateは変更無しであるため SetAdded出来ます。@文がつながってない ※DataTableは、画面の入力内容をセットしていないため変更無しの状態です。 2 この分の更新後用の伝票入力テーブルのDataTableは いらないのです。 @更新したんでしょ? 伝票テーブルは更新します。でも伝票入力ログテーブルは 更新前のデータだけでよいのです。 伝票の行を削除したからです。 修正であれば 更新前、更新後の2件更新します。 3 更新後用の伝票入力ログテーブルにCopyし またRowStateをAdd状態しましたが、 変でしょうか? @意味わかんね ここの部分のコードを載せます DataAdapter.Update(Ds, "明細") そしてこの後 datatable = Ds.Tables("明細").Copy For Each INVLROW As DataRow In datatable.Rows INVLROW.AcceptChanges() INVLROW.SetAdded() next といった処理を行っていますが DataAdapter.Update(Ds, "明細") と更新した後RowStateをAdd状態するのは変でしょうか? と聞きたかったのです。 伝わりましたでしょうか? |