在Button的click事件中加如下代碼,清空ClientDataSet2。
if not ClientDataSet2.Active then
ClientDataSet2.Active := true;
ClientDataSet2.EmptyDataSet;
在后續的一個回圈中實作如下代碼,用以向ClientDataSet2中添加資料記錄。
with ClientDataSet2 do
begin
if not Active then Active := True;
Append;
FieldByName('NUMBER').asstring := '5'; //執行到這一句就報錯:Dataset not in edit or insert mode。洗掉該句,則在下句中報此錯誤。
FieldByName('LINENO').asstring := '432';
FieldByName('BUSNO').asstring := '213';
FieldByName('STATION').asstring := '43';
FieldByName('STATIONNAME').asstring := '33';
FieldByName('AVERAGESPEED').asstring := '23';
Post;
end;
//下面是測驗跟蹤代碼,附在Append之后,在Append上下斷點。跟蹤發現CanModify為true,ReadOnly為false。但是奇怪的是State始終是dsBrowse。
if CanModify
and(not ReadOnly) then
showmessage('Can');
case State of
dsInactive: showmessage('');
dsBrowse: showmessage('');
dsEdit: showmessage('');
dsInsert: showmessage('');
dsSetKey: showmessage('');
dsCalcFields: showmessage('');
dsFilter: showmessage('');
dsNewValue: showmessage('');
dsOldValue: showmessage('');
dsCurValue: showmessage('');
dsBlockRead: showmessage('');
dsInternalCalc: showmessage('');
dsOpening: showmessage('');
end;
//最后這個也沒鬧明白,采用下面的辦法解決了。將Append(包含Append)和Post(包含Post)之間的代碼用下面的代碼替代。
x:='5';
y:='432';
z:='213';
w:='43';
q:='33';
h:='23';
AppendRecord([x,y,z,w,q,h]);
樓主真心求助論壇里的各路大神分析解決此問題。
uj5u.com熱心網友回復:
應該是在AfterInsert或者其它什么事件里有動作,導致Append后State有變化uj5u.com熱心網友回復:
看下你的 ClientDataSet2 的AfterInsert, beforePost 事件是否寫了什么代碼, 先引掉除錯看看可以通過不~uj5u.com熱心網友回復:
沒有啊 我的ClientDataSet2的這兩個事件里都是空的,沒東西。
uj5u.com熱心網友回復:
with ClientDataSet2 dobegin
Append;
是不是Append和其他方向相同?
即Compiler不認為是ClientDataSet2.Append?
直接寫ClientDataSet2.Append試試。
同理,也有可能FieldByName不對應ClientDataSet2。
用ClientDataSet2.FieldByName試試
uj5u.com熱心網友回復:
你的意思是可能with do 陳述句有問題對吧??我也嘗試過把with do 去掉,單獨寫那些陳述句。還是不行。讓人頭疼的在于:這段代碼有時候行,有時候報錯。我按照這個形式單獨寫個小工程測驗,從來沒報過錯。
uj5u.com熱心網友回復:
在操作前將資料操作狀態,改為EDIT裝態轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/103094.html
標籤:數據庫相關
