因为在数据录入窗口是一个表格,一次可以录入很多各类数据,而且每一个数据都有自己相应的指标,为了算出相应的得分,我用存储过程来实现,但现在问题是若在表格中只输入一个数据时就可以实现,但输入多个就出错!请各位大哥帮忙看一下,我想就是存储过程循环的问题,但不知道怎么改:以下是源码:
if lxmc = '四时类型' then
begin
for i := 0 to m-1 do //行循环
begin
for j := 0 to n-1 do //列循环
if SG_sjz.Cells[j+2,i+1] <>'' then //判断数据不为空时进行以下操作
begin
ph := strtoint(SG_sjz.Cells[0,i+1]); //赋值给变量
sj := strtofloat(SG_sjz.Cells[j+2,i+1]);
ADOSP_sjz.Close; //存储过程开始
ADOSP_sjz.ProcedureName:='hyz_df';
ADOSP_sjz.Parameters.Clear;
ADOSP_sjz.Parameters.CreateParameter('@ph',ftinteger,pdinput,4,ph);
ADOSP_sjz.Parameters.CreateParameter('@sj',ftfloat,pdinput,8,sj);
ADOSP_sjz.Parameters.CreateParameter('@df', ftfloat, pdoutput,4,0);
ADOSP_sjz.Prepared := True;
ADOSP_sjz.ExecProc;
df := floattostr(ADOSP_sjz.Parameters.ParamByName('@df').Value);
ADOSP_sjz.Free;//存储过程结束,根据返回值一起录入数据库
ADOCM_sjz.CommandText := 'insert into ysjlrb(phid,sqz,sjdf,sbd,bb,sjd,rj,hyy) values('''+SG_sjz.Cells[0,i+1]+''','''+SG_sjz.Cells[j+2,i+1]+''','''+df+''','''+CBB_bd.text+''','''+CBB_bb.text+''','''+SG_sjz.Cells[j+2,0]+''','''+datetostr(DTP_sjz.date)+''','''+LB_hyy.Caption+''')';
ADOCM_sjz.Execute;
end;
end;
end;
if lxmc = '四时类型' then
begin
for i := 0 to m-1 do //行循环
begin
for j := 0 to n-1 do //列循环
if SG_sjz.Cells[j+2,i+1] <>'' then //判断数据不为空时进行以下操作
begin
ph := strtoint(SG_sjz.Cells[0,i+1]); //赋值给变量
sj := strtofloat(SG_sjz.Cells[j+2,i+1]);
ADOSP_sjz.Close; //存储过程开始
ADOSP_sjz.ProcedureName:='hyz_df';
ADOSP_sjz.Parameters.Clear;
ADOSP_sjz.Parameters.CreateParameter('@ph',ftinteger,pdinput,4,ph);
ADOSP_sjz.Parameters.CreateParameter('@sj',ftfloat,pdinput,8,sj);
ADOSP_sjz.Parameters.CreateParameter('@df', ftfloat, pdoutput,4,0);
ADOSP_sjz.Prepared := True;
ADOSP_sjz.ExecProc;
df := floattostr(ADOSP_sjz.Parameters.ParamByName('@df').Value);
ADOSP_sjz.Free;//存储过程结束,根据返回值一起录入数据库
ADOCM_sjz.CommandText := 'insert into ysjlrb(phid,sqz,sjdf,sbd,bb,sjd,rj,hyy) values('''+SG_sjz.Cells[0,i+1]+''','''+SG_sjz.Cells[j+2,i+1]+''','''+df+''','''+CBB_bd.text+''','''+CBB_bb.text+''','''+SG_sjz.Cells[j+2,0]+''','''+datetostr(DTP_sjz.date)+''','''+LB_hyy.Caption+''')';
ADOCM_sjz.Execute;
end;
end;
end;
你把他销毁了, 而下一次使用时又没有去构造,系统当然要报错啦