为何在执行sql 时出现 I/O error 104. 错误,整个已经贴在下面,请高手帮我分析分析,不盛感激!(30分)

  • 主题发起人 主题发起人 libaoliang
  • 开始时间 开始时间
L

libaoliang

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure Tkh8.BitBtn1Click(Sender: TObject);
var b1:string;
with table1 do
begin
close;
emptytable;
end;
with table2 do
begin
close;
emptytable;
end;
b1:='insert into cpkl8(fjxm,cpmc,zb0,zb7,zpzl,cpl,cpll,yjp,yjl,hgs,hgl,ywc,zlc,yjl70,hgl30,zj,bcl,zb) ';
b1:=b1+' select fjxm,cpmc,avg(zb0),avg(zb7),sum(zpzl),';
b1:=b1+'sum(cpl),sum(cpl)*100/sum(zpzl),sum(yjp),sum(yjp)*100/sum(cpl),sum(zpzl-c02),';
b1:=b1+'sum(zpzl-c02)*100/sum(zpzl),sum(cpl)*avg(zb0)/100,sum(yjp)*100/sum(cpl)-avg(zb0),0,0,0,avg(bcl),sum(zpzl)/avg(bcl) ';
b1:=b1+'from cpk0 where (rq between :rq1 and :rq2) group by fjxm,cpmc having(sum(zpzl)>0)';
query3.close;
// zlc,yjl70,zj 暂时用0代替,随后再修改。
query3.sql.clear;
query3.sql.add(b1);
query3.parambyname('rq1').asdate:=datetimepicker1.date;
query3.parambyname('rq2').asdate:=datetimepicker2.date;
query3.execsql;
//增加本期分级人员
query4.close;
query4.sql.clear;
query4.sql.add('insert into fjkl(fjxm) select distinct fjxm from cpkl8');
query4.execsql;
//计算每人的综合一级率
table2.open;
with table2 do
first;
while not eof do
begin
// 依此取得每个分级人,并据此计算每个人的综合一级率
edit1.text:='';
edit1.text:=table2.Fieldbyname('fjxm').value;
query4.close;
query4.sql.clear;
query4.sql.add('select sum(ywc)*100/sum(cpl) from cpkl8 where (fjxm=:fjxm) group by fjxm');
query4.ParamByName('fjxm').asstring:=edit1.text;
query4.open;
edit2.text:='';
edit2.text:=floattostr(query4.fields[0].asfloat);
query5.close;
query5.sql.clear;
query5.sql.add('update cpkl8 set zlc=(yjl-:sss)*-1 where (fjxm=:fjxm)');
query5.parambyname('sss').asfloat:=strtofloat(edit2.text);
query5.parambyname('fjxm').asstring:=edit1.text;
query5.execsql;
//
query5.close;
query5.sql.clear;
query5.sql.add('update cpkl8 set yjl70=-1*(yjl-:sss)/100*:ss where (fjxm=:fjxm)');
query5.parambyname('sss').asfloat:=strtofloat(edit2.text);
query5.parambyname('fjxm').asstring:=edit1.text;
query5.parambyname('ss').asinteger:=spinedit1.value;
query5.execsql;
//
query5.close;
query5.sql.clear;
query5.sql.add('update cpkl8 set hgl30=(hgl-zb7)/100*(100-:ss) where (fjxm=:fjxm)');
query5.parambyname('fjxm').asstring:=edit1.text;
query5.parambyname('ss').asinteger:=spinedit1.value;
query5.execsql;
//
query5.close;
query5.sql.clear;
query5.sql.add('update cpkl8 set zj=hgl30+yjl70');
query5.execsql;
//
query5.close;
query5.sql.clear;
query5.sql.add('update cpkl8 set zj=zj*2 where zj>0');
query5.execsql;
//
query5.close;
query5.sql.clear;
query5.sql.add('update cpkl8 set zj=zj*1.5 where zj<0');
query5.execsql;
table2.next;
end;
table2.close;
//以下代码应该最后再执行
b1:='select fjxm as 分级人,cpmc as 产品名称,zb0 as 公司指标,zb7 as 分级指标,zpzl as 装坯总量,cpl as 成品量,cpll as 成品率,';
b1:=b1+'yjp as 一级品,yjl as 一级率,hgs as 合格数,hgl as 合格率,';
b1:=b1+'ywc as 应完成,zlc as 质量差,yjl70 as 一级率70比例,';
b1:=b1+'hgl30 as 合格率30比例,bcl as 班产量,zb as 折班 from cpkl8';
query2.close;
query2.sql.clear;
query2.sql.add(b1);
query2.open;
end;
 
query5.close;
query5.sql.clear;
query5.sql.add('update cpkl8 set zlc=(yjl-:sss)*-1 where (fjxm=:fjxm)');
query5.parambyname('sss').asfloat:=strtofloat(edit2.text);
query5.parambyname('fjxm').asstring:=edit1.text;
query5.execsql;
//
query5.close;
query5.sql.clear;
query5.sql.add('update cpkl8 set yjl70=-1*(yjl-:sss)/100*:ss where (fjxm=:fjxm)');
query5.parambyname('sss').asfloat:=strtofloat(edit2.text);
query5.parambyname('fjxm').asstring:=edit1.text;
query5.parambyname('ss').asinteger:=spinedit1.value;
query5.execsql;
//
query5.close;
query5.sql.clear;
query5.sql.add('update cpkl8 set hgl30=(hgl-zb7)/100*(100-:ss) where (fjxm=:fjxm)');
query5.parambyname('fjxm').asstring:=edit1.text;
query5.parambyname('ss').asinteger:=spinedit1.value;
query5.execsql;
//
query5.close;
query5.sql.clear;
query5.sql.add('update cpkl8 set zj=hgl30+yjl70');
query5.execsql;
//
query5.close;
query5.sql.clear;
query5.sql.add('update cpkl8 set zj=zj*2 where zj>0');
query5.execsql;
//
query5.close;
query5.sql.clear;
query5.sql.add('update cpkl8 set zj=zj*1.5 where zj<0');
query5.execsql;
 
ty_unix:
刚才断线了,无法登陆,没有及时回复,
请回答问题,粘贴我的代码干什么?



 
此问题为何无人问津?谁能告诉我?谁能告诉我?
也许一点点的提示,会帮助我解决大问题!


 
不知道你在提问之前自己想过什么办法来解决问题没有?
这么一长串的代码,根本没耐心看完再去分析的。
先确认到底是数据库访问出错还是程序自身的错误。
在调试的过程中将每个query的sql.text内容放到数据库的操作环境下去运行以保障数据库
访问的正确性。
如果你能明确定位问题关键所在的话,可以继续探讨下去;如果还是只能提供这么一大段
程序,那就算啦!
 
我已经自己检查出来了,
在 first... next; 之间少了begin...end;
我不知道少了它为何会出现I/O error 104. 错误信息!
 
while not eof do
begin
query.....
....
end;
老大,用了那么多query,效率低了
 
with table2 do
你少写了begin...end,则
上面语句的作用范围只为一条语句。

while not eof do
语句中的eof变为了标准输入,因而会出现I/O方面的问题。
 
jrq:
我也不想使用这么多,自己也烦,但这么多的要求,能在一个query中实现吗?
有些数据需要在前一个数据被计算出来以后再计算的,
你的高见呢?

 
你可以将query的结果保存到应用程序中的变量,那样的话,你就可以关闭query再重新使用
了,而有关的计算工作可以通过变量来进行。
应该可以满足你的要求!
 
jrq:
针对上面的功能,能否给出一个query实现的方法,
先谢谢了!

 
多人接受答案了。
 
后退
顶部