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;
错误提示:不能对关闭的数据集进行的操作
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;
错误提示:不能对关闭的数据集进行的操作
不过看你的代码实在太过于矛盾了,你的循环到底是要做什么??
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控件
一开始adoquery1是用来从数据库中取记录的。接下来你又用它往数据库中插记录,这个时候adoquery1一开始的记录集就已经没有了,你再用next方法当然就出错了,建议做查询的adoquery和做更新的adoquery不要用同一个