全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2369
推到 Plurk!
推到 Facebook!

DBGrid直接修改記錄時發生資料異常

缺席
jasonweb
一般會員


發表:2
回覆:3
積分:1
註冊:2009-01-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-02-04 04:53:32 IP:124.8.xxx.xxx 訂閱
想請問各位大大

目前正常寫一隻可以透過dbgrid對database的資料作處理的程式
可是卻遇到一個很奇怪的問題

目前的架構是:
SQLConnection->SQLQuery->DataSetProvider->ClientDataSet->DataSource->DBgrid
而clientdataset 跟 dbgrid的欄位 我有使用 GetText及 SetText 作資料轉換

而資料格式為:
商品 數量 單價 總額
00001 1 50 50
00002 1 150 150

而database裡的資料一開始為空的(有欄位無資料)
增加資料的方式是用四個edit輸入值
然後再用 clientdataset.append() 的方式增加
當我在dbgrid逐項增加上面的資料後都很正常
而當我直接修改dbgrid上的數量時
我有用autocalcfield計算總額(總額欄位為db欄位之一 不是calc欄位)
好比我把數量改為2 會變成下面這樣

商品 數量 單價 總額
00001 2 50 100
00002 1 150 150

到此都很正常
問題發生在 我要再繼續新增下一項資料時
好比00003 1 200 200
會變成下列的情況

商品 數量 單價 總額
00001 2 50 100
00002 1 150 150
00001 2 50 100
00002 1 150 150
00001 2 50 100
00002 1 150 150
............(重覆00001、00002的記錄約2~3次)
............
00003 1 200 200

然後我用 ClientDataSet.ChangeCount 來看被變動的資料有幾筆
卻只有3筆
也就是說 異常增加的那些記錄 並不存在在clientdataset
然後將資料 applyupdate到database後
也的確是三筆
而再增加第四筆記錄 有時候又會變回顯示正常的四筆

想請問有沒有大大遇過類似的問題
卡在這滿久的 目前還沒找到問題點
編輯記錄
jasonweb 重新編輯於 2009-02-04 10:41:36, 註解 無‧
frappe
中階會員


發表:88
回覆:114
積分:95
註冊:2008-10-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-02-11 11:00:01 IP:115.83.xxx.xxx 訂閱
1. 你的table有沒有設unique index?
2. 檢查TSQLQuery的Event有沒有寫什麼程式?
jasonweb
一般會員


發表:2
回覆:3
積分:1
註冊:2009-01-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-04-08 11:55:45 IP:59.120.xxx.xxx 訂閱
雖然很久之前就解決了 但遲遲沒上來回應
造成原因是我在OnCalcFields事件裡 用到了 Aggregate欄位才會造成此結果Orz
因為欄位一變動 就會觸發OnCalcFields
然後OnCalcFields又會去動用Aggregates欄位
Aggregates欄位只要有被讀取 就會重新計算
重新計算 又去觸發OnCalcFields
然後就這樣一直重覆 目前翻書理解到的是這樣
有錯誤請鞭 orz
編輯記錄
jasonweb 重新編輯於 2009-04-08 12:23:59, 註解 無‧
系統時間:2024-04-20 0:19:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!