線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1732
推到 Plurk!
推到 Facebook!

在win8作業系統下執行發生了delete 錯誤....

尚未結案
wayneboy
一般會員


發表:1
回覆:0
積分:0
註冊:2005-06-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2013-08-26 15:36:23 IP:180.176.xxx.xxx 訂閱

現象:
由Delphi 2007撰寫的應用程式於Win XP與Win 7下尚未出現的錯誤,在win8作業系統下發生了!!執行刪除DBGgrid最後一筆資料時出現錯誤訊息(可能是BOF或EOF的值為true,或目前的資料己被刪除...),刪除別筆資料或只有一筆資料下刪除時不會)。

追查情況:
實際以win8環境慢慢Trace code後,竟是死在ADODB(ADODB.pas)的DoRecordsetDelete下 ..

[code delphi]
procedure DoRecordsetDelete(DataSet: TCustomADODataSet; AffectRecords: TAffectRecords);
begin
with DataSet do
try
Recordset.Delete(AffectRecordsValues[AffectRecords]);
{ When CacheSize > 1, Recordset allows fetching of deleted records.
Calling MovePrevious seems to work around it }
if (CacheSize > 1) and (PRecInfo(ActiveBuffer).RecordNumber <> 1) then
begin
Recordset.MovePrevious;
Recordset.MoveNext;
end;
Recordset.MoveNext;
// win8環境執行時,在此發生此錯誤,但XP及Win7則正常
except
on E: Exception do
begin
Recordset.CancelUpdate;
DatabaseError(E.Message);
end;
end;
end;

[/code]

尚不知為何只在Win8執行才會在該行出錯,發現dataset的CacheSize調整為1可避開此錯誤(CacheSize值預設是1),不知是否真要將程式所有dataset的CacheSize調整為1來解決?是否會因此調整影響執行效率?
編輯記錄
wayneboy 重新編輯於 2013-08-26 15:43:56, 註解 無‧
chris681016
中階會員


發表:69
回覆:122
積分:98
註冊:2006-10-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2013-08-26 17:46:25 IP:211.75.xxx.xxx 訂閱
我也是將CacheSize=1說,目前暫時還ok~~
系統時間:2024-04-27 4:16:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!