ClientDataSet.Delta 資料如何顯示出來 ? |
答題得分者是:Brian77
|
stillalive
初階會員 發表:7 回覆:148 積分:41 註冊:2004-04-07 發送簡訊給我 |
|||
Brian77
中階會員 發表:8 回覆:114 積分:94 註冊:2002-05-17 發送簡訊給我 |
|||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 在下CLIENT端發出UPDATE指令 , 結果跑出 dismatch packetdata 錯誤訊息 . 我是用 tree tier 假構 , 在DCOM.APPSERVER.APPLYUPDATE 出問題 . 我懷疑是CLIENTDATASET.DELTA內容有誤 , 但其值為OLEVARIANT , 用WATCH DEBUG也看不出來 , 請問各位先進該如何是好 ?????可能是沒有異動資料,Delta是Null所以出現錯誤,可先判斷是否有異動: 1.ChangeCount要大於零。 2.VarIsNull(ClientDataSet1.Delta)要是False。
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
||
stillalive
初階會員 發表:7 回覆:148 積分:41 註冊:2004-04-07 發送簡訊給我 |
TO Brian77
再另設一 TClientDataSet 將其 Data:=要看的delta;
(記得觀察它的 UpdateStatus) ==============================================================
不了 , 是否能說明更詳盡 ? TO JieShu
可能是沒有異動資料,Delta是Null所以出現錯誤,可先判斷是否有異動:
1.ChangeCount要大於零。
2.VarIsNull(ClientDataSet1.Delta)要是False
================================================================== changecount > 0 , delta is not null .
|
||
stillalive
初階會員 發表:7 回覆:148 積分:41 註冊:2004-04-07 發送簡訊給我 |
|||
Brian77
中階會員 發表:8 回覆:114 積分:94 註冊:2002-05-17 發送簡訊給我 |
先針對觀察 Delta 這件事說明:
procedure xxxx(delta:OLEVARIANT); var qrWork:TClientDataSet; begin try qrWork:=TClientDataSet.Create; except ShowMessage('Err') exit; end; try try qrWork.Data:=delta; qrWork.First; except ShowMessage('空的, 沒有異動資料'); exit; end; Memo1.Lines.Clear; while not qrWork.EoF do begin case qrWork.UpdateStatus of usInsearted: Memo1.Lines.Add('新增'); usModified: Memo1.Lines.Add('修改後的值'); usDeleted: Memo1.Lines.Add('刪除'); else Memo1.Lines.Add('修改前的值'); end; // qrWork 擁有原 ClientDataSet 所有的欄位 // 各欄位有 OldValue 和 NewValue // 沒有異動的欄位的 NewValue 可用 VarIsEmpty 檢測出 true qrWork.Next; end; finally try qrWork.Destroy; except end; end; end; |
||
Brian77
中階會員 發表:8 回覆:114 積分:94 註冊:2002-05-17 發送簡訊給我 |
|||
Brian77
中階會員 發表:8 回覆:114 積分:94 註冊:2002-05-17 發送簡訊給我 |
|||
stillalive
初階會員 發表:7 回覆:148 積分:41 註冊:2004-04-07 發送簡訊給我 |
To Brain 大大 重看一次問題, 看到 dismatch packetdata 似曾相識...
之前用 D7 dbExpress MSSQL 使用 PacketRecords 時, ApplyUpdate 會出現這個訊息... dbExpress FOR MSSQL 有蠻多 Bug 的, 不知你的是不是也匠 =================================================================== 我已放棄用dbexpress元件 , 這case沒用dbexpress , 3-tier struture list below TDatabase TSeesion TQuery TDataProvider (AppServer Component)
TDataProvider TClientDataSet TDataSource TDBGrid (Client Component) 另外大大所附code 尚有疑問 procedure xxxx(delta:OLEVARIANT);
var qrWork:TClientDataSet;
begin
try qrWork:=TClientDataSet.Create;
except ShowMessage('Err') exit;
end;
try
try qrWork.Data:=delta; qrWork.First;
except ShowMessage('空的, 沒有異動資料'); exit;
end;
Memo1.Lines.Clear;
while not qrWork.EoF do
begin
case qrWork.UpdateStatus of
usInsearted: Memo1.Lines.Add('新增');
usModified: Memo1.Lines.Add('修改後的值');
usDeleted: Memo1.Lines.Add('刪除');
else Memo1.Lines.Add('修改前的值'); ======================================================= Memo1.Lines.Add(?) , 這裡面變數該如何去擺 ????
不好意思 , 真是太囉嗦了 .
|
||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 更正 , 應是ClientDataSet.Reconclie(Delta) 時出問題 . 如光只DCOM.APPSERVER.APPLYUPDATE 資料庫無UPDATE .那就先判斷 if not VarIsNull(Delta) then ClientDataSet.Reconclie(Delta);應該是你Update過程中有問題,不然做完DataSetProvider.ApplyUpdates應該資料就會寫入資料庫,你可用SQL Monitor看一下更新的SQL。 另外Delta應該是DataSetProvider.ApplyUpdates所傳回的值,詳細請參考這篇 【問題】多層架構的自動編號 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=46216
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
||
Brian77
中階會員 發表:8 回覆:114 積分:94 註冊:2002-05-17 發送簡訊給我 |
常遇到的 ApplyUpdates 後資料庫沒有異動的原因是下 ApplyUpdates 時沒有判斷傳回值是否大於 0 又沒寫 onReconcileError 事件
當發生錯誤時, 並不會有例外發生, 因此雖然沒有回寫成功, 程式還是往下跑了 顯示各欄位的方法:
var i:integer; mStr:String; for i:=0 to qrWork.Fields.Count-1 do begin if VarIsEmpty(qrWork.Fields[0].NewValue) then mStr:='[不變]' else if VarIsNull(qrWork.Fields[0].NewValue) then mStr:='[NULL]' else mStr:=qrWork.Fields[0].NewValue; Memo1.Lines.Add(qrWork.Fields[0].FieldName '=' mStr); end; |
||
stillalive
初階會員 發表:7 回覆:148 積分:41 註冊:2004-04-07 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |