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;
...全文
182 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
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控制處理下。。。
nimeide1234567890 2011-03-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zengpu2109 的回复:]
試試ClientDataSet1.Edit
錯誤的提示意思是不在編輯或插入模式
[/Quote]

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

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

2,507

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧