求助:一个让很多人困惑的问题Dataset not in edit or insert mode

lovegreenery_6 2014-07-29 09:44:42
在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]);
楼主真心求助论坛里的各路大神分析解决此问题。
...全文
2817 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
sundgy 2014-08-01
在操作前将数据操作状态,改为EDIT装态
回复
lovegreenery_6 2014-07-30
引用 4 楼 frank_lee_cn 的回复:
with ClientDataSet2 do begin Append; 是不是Append和其他方向相同? 即Compiler不认为是ClientDataSet2.Append? 直接写ClientDataSet2.Append试试。 同理,也有可能FieldByName不对应ClientDataSet2。 用ClientDataSet2.FieldByName试试
你的意思是可能with do 语句有问题对吧??我也尝试过把with do 去掉,单独写那些语句。还是不行。让人头疼的在于:这段代码有时候行,有时候报错。我按照这个形式单独写个小工程测试,从来没报过错。
回复
Frank6600 2014-07-30
with ClientDataSet2 do begin Append; 是不是Append和其他方向相同? 即Compiler不认为是ClientDataSet2.Append? 直接写ClientDataSet2.Append试试。 同理,也有可能FieldByName不对应ClientDataSet2。 用ClientDataSet2.FieldByName试试
回复
gallardo 2014-07-29
应该是在AfterInsert或者其它什么事件里有动作,导致Append后State有变化
回复
lovegreenery_6 2014-07-29
引用 1 楼 gallardo 的回复:
应该是在AfterInsert或者其它什么事件里有动作,导致Append后State有变化
引用 2 楼 yangb0803 的回复:
看下你的 ClientDataSet2 的AfterInsert, beforePost 事件是否写了什么代码, 先引掉调试看看可以通过不~
没有啊 我的ClientDataSet2的这两个事件里都是空的,没东西。
回复
道玄希言 2014-07-29
看下你的 ClientDataSet2 的AfterInsert, beforePost 事件是否写了什么代码, 先引掉调试看看可以通过不~
回复
相关推荐
发帖
数据库相关
创建于2007-08-02

2454

社区成员

Delphi 数据库相关
申请成为版主
帖子事件
创建了帖子
2014-07-29 09:44
社区公告
暂无公告