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

ApplyUpdates的怪現象

答題得分者是:leveon
keny1024
一般會員


發表:5
回覆:8
積分:2
註冊:2010-03-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2012-06-28 18:23:01 IP:111.240.xxx.xxx 訂閱
Dear All:
小弟參考李維大師關於多資料表異動的程式,卻發生了明細檔可以新增資料,但主檔卻無法新增資料的怪事.debug時檢查ChangeCount都大於0,也都有執行ApplyUpdates,但主檔就是無法新增資料,爬了許多文章,就是不知錯在哪裡?懇請各位高手能助小弟一臂之力.程式碼如下:
[code delphi]
procedure TFrmOrder.BitBtn4Click(Sender: TObject);
var vTD : TTransactionDesc;
begin
if (NOT SQLConn_ORDER.InTransaction) then
begin
vTD.TransactionID := 1;
vTD.IsolationLevel := xilREADCOMMITTED;
// 開始交易
SQLConn_ORDER.Close;
SQLConn_ORDER.StartTransaction(vTD);
try
if (CDS_PAID.state <> dsEdit) and (CDS_PAID.state <> dsInsert) then
CDS_PAID.Edit;
if (CDS_ORDER_D.state <> dsEdit) and (CDS_ORDER_D.state <> dsInsert) then
CDS_ORDER_D.Edit;
if (CDS_ORDER_M.state <> dsEdit) and (CDS_ORDER_M.state <> dsInsert) then
CDS_ORDER_M.Edit;
CDS_ORDER_M.Post;
if CDS_PAID.ChangeCount > 0 then
CDS_PAID.ApplyUpdates(-1);
if CDS_ORDER_D.ChangeCount > 0 then
CDS_ORDER_D.ApplyUpdates(-1);
if CDS_ORDER_M.ChangeCount > 0 then
CDS_ORDER_M.ApplyUpdates(-1);
SQLConn_ORDER.Commit(vTD);
except
on e : Exception do
begin
ShowMessage(e.Message);
SQLConn_ORDER.Rollback(vTD);
end;
end;
end;
end;

[/code]
leveon
資深會員


發表:29
回覆:386
積分:303
註冊:2012-02-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2012-06-29 10:14:53 IP:122.116.xxx.xxx 訂閱
你可以試試SQL Monitor 看最後翻成了什麼SQL 
導致無法新增

===================引 用 keny1024 文 章===================
Dear All:
小弟參考李維大師關於多資料表異動的程式,卻發生了明細檔可以新增資料,但主檔卻無法新增資料的怪事.debug時檢查ChangeCount都大於0,也都有執行ApplyUpdates,但主檔就是無法新增資料,爬了許多文章,就是不知錯在哪裡?懇請各位高手能助小弟一臂之力.程式碼如下:
[code delphi]
procedure TFrmOrder.BitBtn4Click(Sender: TObject);
var vTD : TTransactionDesc;
begin
if (NOT SQLConn_ORDER.InTransaction) then
begin
vTD.TransactionID := 1;
vTD.IsolationLevel := xilREADCOMMITTED;
// 開始交易
SQLConn_ORDER.Close;
SQLConn_ORDER.StartTransaction(vTD);
try
if (CDS_PAID.state <> dsEdit) and (CDS_PAID.state <> dsInsert) then
CDS_PAID.Edit;
if (CDS_ORDER_D.state <> dsEdit) and (CDS_ORDER_D.state <> dsInsert) then
CDS_ORDER_D.Edit;
if (CDS_ORDER_M.state <> dsEdit) and (CDS_ORDER_M.state <> dsInsert) then
CDS_ORDER_M.Edit;
CDS_ORDER_M.Post;
if CDS_PAID.ChangeCount > 0 then
CDS_PAID.ApplyUpdates(-1);
if CDS_ORDER_D.ChangeCount > 0 then
CDS_ORDER_D.ApplyUpdates(-1);
if CDS_ORDER_M.ChangeCount > 0 then
CDS_ORDER_M.ApplyUpdates(-1);
SQLConn_ORDER.Commit(vTD);
except
on e : Exception do
begin
ShowMessage(e.Message);
SQLConn_ORDER.Rollback(vTD);
end;
end;
end;
end;

[/code]
keny1024
一般會員


發表:5
回覆:8
積分:2
註冊:2010-03-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2012-06-29 11:12:30 IP:111.240.xxx.xxx 訂閱
謝謝leveon前輩的提醒,趕緊來試試!
keny1024
一般會員


發表:5
回覆:8
積分:2
註冊:2010-03-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2012-06-29 14:09:12 IP:111.240.xxx.xxx 訂閱
試著依照leveon前輩的建議,觀察SQLMonitor,卻查不出有何異狀,很奇怪!CDS_ORDER_M,CDS_PAID,CDS_ORDER_D等3個的ChangeCount都大於0,程式都有執行ApplyUpdates,也沒有甚麼錯誤產生?但卻只有CDS_ORDER_M資料表沒有新增資料,而CDS_PAID,CDS_ORDER_D卻新增無誤.對了!CDS_ORDER_M是主檔,而CDS_PAID,CDS_ORDER_D是明細檔,難道有甚麼該設定的地方,我沒有去設定呢?請諸位高手能伸出援手,給點建議吧!(都快2天了,還找不出答案!)
GrandRURU
站務副站長


發表:234
回覆:1651
積分:1742
註冊:2005-06-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2012-06-29 14:48:17 IP:59.120.xxx.xxx 訂閱
試著先對CDS_Order_M主檔做ApplyUpdates(-1);
再做其它的明細檔看看

===================引 用 keny1024 文 章===================
試著依照leveon前輩的建議,觀察SQLMonitor,卻查不出有何異狀,很奇怪!CDS_ORDER_M,CDS_PAID,CDS_ORDER_D等3個的ChangeCount都大於0,程式都有執行ApplyUpdates,也沒有甚麼錯誤產生?但卻只有CDS_ORDER_M資料表沒有新增資料,而CDS_PAID,CDS_ORDER_D卻新增無誤.對了!CDS_ORDER_M是主檔,而CDS_PAID,CDS_ORDER_D是明細檔,難道有甚麼該設定的地方,我沒有去設定呢?請諸位高手能伸出援手,給點建議吧!(都快2天了,還找不出答案!)
leveon
資深會員


發表:29
回覆:386
積分:303
註冊:2012-02-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2012-06-29 15:48:28 IP:122.116.xxx.xxx 訂閱
沒有錯誤很正常 
ClientDataset的錯誤補捉 是靠 onreconcileerror 這個事件
你可以用這關鍵字去google找範例抄

另外 印象中DBExpress 送的資料庫驅動多半是有問題
內建的只有Interbase driver或Devart 出品 的才算堪用
不知道你的資料庫是那一個牌子?

keny1024
一般會員


發表:5
回覆:8
積分:2
註冊:2010-03-19

發送簡訊給我
#7 引用回覆 回覆 發表時間:2012-06-29 17:15:25 IP:111.240.xxx.xxx 訂閱
很感謝GrandRURU及leveon兩位前輩的指點,但leveon前輩給了我一個找尋問題的方向,我的問題已解決了,在此想將分數給予leveon前輩,謝謝兩位前輩的樂新指點!
P.D.
版主


發表:571
回覆:3880
積分:3666
註冊:2006-10-31

發送簡訊給我
#8 引用回覆 回覆 發表時間:2012-06-29 20:40:38 IP:118.160.xxx.xxx 未訂閱
請問如何解決的, 能不能分享?
===================引 用 keny1024 文 章===================
很感謝GrandRURU及leveon兩位前輩的指點,但leveon前輩給了我一個找尋問題的方向,我的問題已解決了,在此想將分數給予leveon前輩,謝謝兩位前輩的樂新指點!
leveon
資深會員


發表:29
回覆:386
積分:303
註冊:2012-02-12

發送簡訊給我
#9 引用回覆 回覆 發表時間:2012-06-29 21:07:05 IP:111.240.xxx.xxx 訂閱
如果是靠onreconcileerror 得到Sql server回傳錯誤資訊 
我猜多半是資料庫結構的限制導致無法新增成功
比方是 primary key 重複之類的

===================引 用 P.D. 文 章===================
請問如何解決的, 能不能分享?
===================引 用 keny1024 文 章===================
很感謝GrandRURU及leveon兩位前輩的指點,但leveon前輩給了我一個找尋問題的方向,我的問題已解決了,在此想將分數給予leveon前輩,謝謝兩位前輩的樂新指點!
編輯記錄
leveon 重新編輯於 2012-06-29 07:07:31, 註解 無‧
系統時間:2017-10-17 21:14:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!