with adoquery1 do
begin
first;
while not eof do
 begin
 showmessage(inttostr(pos));
 sql.add('insert zyp (学号,'+dbgrid1.Fields[1].FieldName+',毕业去向) values (:n,:m,:k)');
 parameters.ParamByName('n').Value :=dbgrid2.Fields[0].AsString;
 parameters.ParamByName('m').Value :=dbgrid2.Fields[1].AsString;
 parameters.ParamByName('k').Value :=dbgrid2.Fields[2].AsString;
 execsql;
 next;
 end;
end;
错误提示:不能对关闭的数据集进行的操作

解决方案 »

  1.   

    //错误很明显了,adoquery1未打开(open),你执行什么first,next当然出错了
    不过看你的代码实在太过于矛盾了,你的循环到底是要做什么?? 
    with dbgrid2.DataSource do
    begin
      first;
      while not eof do
      begin
       showmessage(inttostr(pos));
       adoquery1.Close;
       adoquery1.SQL.Clear;
       adoquery1.sql.add('insert zyp (学号,'+dbgrid1.Fields[1].FieldName+',毕业去向) values (:n,:m,:k)');
       parameters.ParamByName('n').Value :=dbgrid2.Fields[0].AsString;
       parameters.ParamByName('m').Value :=dbgrid2.Fields[1].AsString;
       parameters.ParamByName('k').Value :=dbgrid2.Fields[2].AsString;
       adoQuery1.execsql;
       next;
     end;
    end;**dbgrid2.DataSource与AdoQuery1不能是同一个TDataSet控件
      

  2.   

    大哥,你说的问题我都知道,但是问题不在这里,adoquery1是open的
      

  3.   

    我要做的是把dbgrid2中的字段下的值添加到新表中
      

  4.   

    这个错误很明显。
    一开始adoquery1是用来从数据库中取记录的。接下来你又用它往数据库中插记录,这个时候adoquery1一开始的记录集就已经没有了,你再用next方法当然就出错了,建议做查询的adoquery和做更新的adoquery不要用同一个
      

  5.   

    赞同 Bes96261(秋水孤鶩) ,楼主,你的循环????