ADO 使用 CANCELUPDATE 問題 |
尚未結案
|
zwsoft
一般會員 發表:20 回覆:17 積分:10 註冊:2002-11-18 發送簡訊給我 |
各位兄台,
小弟在取消對ADOQUERY資料的新增時(ADOQUERY LockType =ltBatchOptimistic), 用到cancelupdate,但執行完跳出以下錯誤: "行句柄引用了一個已被刪除的行或被標識為刪除的行",。不解中。。。 修改就沒有問題。 我想在主表記錄CANCEL時,將明細表中新加入的記錄也清除。 procedure TForm1.Btn_cancelClick(Sender: TObject); begin main_query.CancelUpdates ; ---主表 ship_date_query.CancelUpdates; -- 明細表 出錯在這一行 ..... end; |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
zwsoft
一般會員 發表:20 回覆:17 積分:10 註冊:2002-11-18 發送簡訊給我 |
謝謝版主幫助,
明細表中新增的數據會進行匯總,如果取消這段代碼,也不會出錯了,但CANCELUPDATES是在賦值之後發生的,這點就搞不明白了。 With DataSource1.DataSet DO //明細表 代碼主要將明細表中幾個數匯總 BEGIN if NOT ISEMPTY then BEGIN First; while NOT EOF do BEGIN Edit; fieldbyname('CO').VALUE:=G_CO; fieldbyname('CUS').VALUE:=G_CUS; fieldbyname('CODE').VALUE:=G_CODE; if not FieldByName('QTY').IsNull then i:=i FieldByName('QTY').Value; if PACK_QTY_DISP_MARK then begin if not FieldByName('PACKING_QTY').IsNull then j:=j FieldByName('PACKING_QTY').Value; end; Next ; END; if not DataSource1.DataSet.FieldByName('TDATE').isnull then G_TDATE:=DataSource1.DataSet.FieldByName('TDATE').Value ; G_QTY:=i ; G_PACK_QTY:=j; END ELSE BEGIN G_TDATE:=0; G_QTY:=0; G_PACK_QTY:=0; END; END; 最後找到一個無奈的作法: 我在主表cancelupdates後加了一行 main_query.CancelUpdates; main_query.Requery ; ship_date_query.CancelUpdates; 就不會產生錯誤了。 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |