ApplyUpdates的怪現象 |
答題得分者是:leveon
|
keny1024
一般會員 發表:6 回覆:8 積分:2 註冊:2010-03-19 發送簡訊給我 |
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
資深會員 發表:30 回覆:389 積分:303 註冊:2012-02-12 發送簡訊給我 |
你可以試試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
一般會員 發表:6 回覆:8 積分:2 註冊:2010-03-19 發送簡訊給我 |
|
keny1024
一般會員 發表:6 回覆:8 積分:2 註冊:2010-03-19 發送簡訊給我 |
試著依照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
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
試著先對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
資深會員 發表:30 回覆:389 積分:303 註冊:2012-02-12 發送簡訊給我 |
|
keny1024
一般會員 發表:6 回覆:8 積分:2 註冊:2010-03-19 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
leveon
資深會員 發表:30 回覆:389 積分:303 註冊:2012-02-12 發送簡訊給我 |
如果是靠onreconcileerror 得到Sql server回傳錯誤資訊
我猜多半是資料庫結構的限制導致無法新增成功 比方是 primary key 重複之類的 ===================引 用 P.D. 文 章=================== 請問如何解決的, 能不能分享? ===================引 用 keny1024 文 章=================== 很感謝GrandRURU及leveon兩位前輩的指點,但leveon前輩給了我一個找尋問題的方向,我的問題已解決了,在此想將分數給予leveon前輩,謝謝兩位前輩的樂新指點!
編輯記錄
leveon 重新編輯於 2012-06-29 07:07:31, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |