ClientDataSet1加载数据,统计事件错误:ClientDataSet1: Dataset not in edit or insert mode.

nimeide1234567890 2011-03-15 03:31:21
先从数据库加载数据
First;
while not Eof do
begin
ClientDataSet1.Append;
ClientDataSet1.FieldByName('bh').AsString:=FieldByName('bh').AsString;
ClientDataSet1.FieldByName('qm').AsString:=FieldByName('qm').AsString;
ClientDataSet1.FieldByName('dw').AsString:=FieldByName('dw').AsString;
ClientDataSet1.FieldByName('sl').AsString:=FieldByName('sl').AsString;//数量
ClientDataSet1.FieldByName('bz').AsString:=FieldByName('bz').AsString;
ClientDataSet1.Post;
Next;
end;

然后 ClientDataSet1slChange 事件里统计数量和
procedure TFormScmbAdd.ClientDataSet1slChange(Sender: TField);
var
a:double;
begin
a:=0;
if ClientDataSet1.IsEmpty then Exit;
if (ClientDataSet1.FieldByName('sl').isnull) or (ClientDataSet1.FieldByName('sl').asString='') then exit;
ClientDataSet1.First;//去掉这句就没有错误,但去掉后就统计不出来
while not ClientDataSet1.Eof do
begin
a:=a+strtoint(ClientDataSet1.FieldByName('sl').AsString);
ClientDataSet1.Next;
end;
Label5.Caption:=floattostr(a);
end;
...全文
115 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
notebook800 2011-04-07


//然后 ClientDataSet1slChange 事件里统计数量和
//要增加开关,否则会死循环,并报错
var
bLock:Boolean = false;

procedure TFormScmbAdd.ClientDataSet1slChange(Sender: TField);
var
a:double;
begin
a:=0;
if ClientDataSet1.IsEmpty then Exit;
if (ClientDataSet1.FieldByName('sl').isnull) or (ClientDataSet1.FieldByName('sl').asString='') then exit;
if bLock then exit;//判断锁状态
bLock := true;//加锁
//记录的滚动,也会触发Change事件,所以你下面的这句话,会造成死循环
ClientDataSet1.First;//去掉这句就没有错误,但去掉后就统计不出来
while not ClientDataSet1.Eof do
begin
a:=a+strtoint(ClientDataSet1.FieldByName('sl').AsString);
ClientDataSet1.Next;
end;
bLock := false;//解锁
Label5.Caption:=floattostr(a);
end;

回复
kye_jufei 2011-04-07
用個boolean控制處理下。。。
回复
[Quote=引用 4 楼 zengpu2109 的回复:]
試試ClientDataSet1.Edit
錯誤的提示意思是不在編輯或插入模式
[/Quote]

也不行啊
回复
George-Vick 2011-03-16
試試ClientDataSet1.Edit
錯誤的提示意思是不在編輯或插入模式
回复
[Quote=引用 1 楼 bdmh 的回复:]
加载数据数据库时,可能触发了下面的事件,如果同步不好的话,可能出错,其实,你完全可以在加载数据过程中就把总数统计出来
[/Quote]

手工加载的时候就没有错误
回复
luo_riser 2011-03-15
这样设置每次输入一个数字都会触发chang事件,就算有结果也不会正确吧
回复
bdmh 2011-03-15
加载数据数据库时,可能触发了下面的事件,如果同步不好的话,可能出错,其实,你完全可以在加载数据过程中就把总数统计出来
回复
相关推荐
发帖
数据库相关
创建于2007-08-02

2454

社区成员

Delphi 数据库相关
申请成为版主
帖子事件
创建了帖子
2011-03-15 03:31
社区公告
暂无公告