Delphi 循环 ,急!谢谢! 5

我的代码如下:当运行到adoquery1.Next时会报:adoquery1cannotperformthisoperationonacloseddataset的错误,为... 我的代码如下:当运行到adoquery1.Next时会报:adoquery1 cannot perform this operation on a closed dataset的错误,为什么?
adoquery1.First;
while not adoquery1.Eof do
begin
tsh:=adoquery1.fieldbyname('TSH').AsFloat;
hj:=(tsh*195+kch*195*0.75+qjz*195)*0.16;
sqlstr:=format('update t_glgzdru1 set JE=%6g',[hj]);
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add(sqlstr);
adoquery1.ExecSQL;
adoquery1.Next;
end;
谢谢你,懒虫007!可是我加了一个数据集adoquery2后,满足条件的JE这个字段的所有记录都为一个数据,比方说50,就是说在hj:=(tsh*195+kch*195*0.75+qjz*195)*0.16中tsh,kch,qjz没起到作用,为何?
展开
 我来答
快乐居家美食
2006-12-19 · TA获得超过1943个赞
知道大有可为答主
回答量:2392
采纳率:100%
帮助的人:1571万
展开全部
问题在于你在循环内部改变了adoquery1的状态,
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add(sqlstr);
adoquery1.ExecSQL;
这部分语句实际上会造成Adoquery1里面没有任何记录,处于关闭状态,当然也就无法使用记录集操作adoquery1.Next了,解决的办法是在窗体上再添加一个adoquery2然后
adoquery1.First;
while not adoquery1.Eof do
begin
tsh:=adoquery1.fieldbyname('TSH').AsFloat;
hj:=(tsh*195+kch*195*0.75+qjz*195)*0.16;
sqlstr:=format('update t_glgzdru1 set JE=%6g',[hj]);
adoquery2.Close;
adoquery2.SQL.Clear;
adoquery2.SQL.Add(sqlstr);
adoquery2.ExecSQL;
adoquery1.Next;
end;
另外你的update语句也有问题,没有限制条件,所有会造成所有记录都变成一样的值了。
对于这样的情况应该有办法来解决:
1、使用记录方法:
while not adoquery1.eof do
begin
adoquery1.edit;
adoquery1.fieldbyname('JE').value :=(adoquery1.fieldbyname('TSH').AsFloat*195+adoquery1.fieldbyname('TSH').AsFloat*195*0.75+qjz*195)*0.16;
adoquery1.post;
adoquery1.next;
end;
这种情况是在字段JE与TSH在一个记录集的情况,如果不在一个记录集,可以再添加一个adoquery来实现操作。
2、使用SQL语句来操作:
update t_glgzdru1 set JE= TSH*195+TSH*195*0.75+qjz(这里替换成字段名)*0.16
直接执行这样的一条语句就可以完成整个表格的更新,所以从效率的角度来看,还是直接用SQL比较好。
3、在你的SQL语句里面添加where条件,继续用循环来完成。
yueyun889
2006-12-19 · TA获得超过725个赞
知道小有建树答主
回答量:539
采纳率:0%
帮助的人:764万
展开全部
adoquery1.First;
while not adoquery1.Eof do
begin
tsh:=adoquery1.fieldbyname('TSH').AsFloat;
hj:=(tsh*195+kch*195*0.75+qjz*195)*0.16;
sqlstr:=format('update t_glgzdru1 set JE=%6g',[hj]);
....
在 adoquery1.first 后添加:
tsh:=adoquery1.fieldbyname('TSH').AsFloat;
hj:=(tsh*195+kch*195*0.75+qjz*195)*0.16;
在找到第一笔记录的时候就给tsh,hj赋值.
试试吧.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式