AdoQuery无法把最后一条记录添加到新表中。代码如下:
procedure TForm1.Button2Click(Sender: TObject);
begin
AdoQuery1.ConnectionString:='DBQ='+strDBName+';Driver={Microsoft Access Driver (*.mdb)};';
AdoQuery1.SQL.Clear;
//找出有重复学号的学生记录
AdoQuery1.SQL.Add('SELECT xh,count(xh) as Total  FROM PicNum group by xh having count(xh)>=2 order by count(xh) desc;');
AdoQuery1.Active:=true;
AdoQuery1.First;
AdoQuery2.ConnectionString:=AdoQuery1.ConnectionString;
AdoQuery2.SQL.Clear;
AdoQuery2.SQL.Add('Select * from PicNum_temp');
AdoQuery2.Open;
while not AdoQuery1.Eof do
begin
if  AdoQuery1.Eof  then
break;
AdoQuery2.Insert; 
//AdoQuery2中保存着PicNum表中每个学号重复的次数
AdoQuery2.FieldByName('xh').AsString:=AdoQuery1.FieldByName('xh').AsString;
AdoQuery2.FieldByName('Total').AsString:=AdoQuery1.FieldByName('Total').AsString;
Adoquery2.ExecSQL;
AdoQuery1.Next;
end;
end;
假如AdoQuery中返回四条记录,通过DBGrid看这个AdoQuery1是如下:
    XH                  Total
20000721066              5
20000721078              4
20001532040              3
20020541017              2
但是再看AdoQuery2中更新的表PicNum_temp中记录只有前三条,也就是重复次数为2的记录没有入库,当把上面AdoQuery1的SQL的默认排序由DESC改为ASC即改变排序方向后再执行这段代码则重复次数为2,3,4的记录入库了,而重复次数为5的记录也就是最后一条记录就是没有入库,这是怎么回事啊?

解决方案 »

  1.   

    if  AdoQuery1.Eof  then
    break;
    这句没用,去掉。
      

  2.   

    AdoQuery2.Insert; 
    //AdoQuery2中保存着PicNum表中每个学号重复的次数
    AdoQuery2.Edit;
    AdoQuery2.FieldByName('xh').AsString:=AdoQuery1.FieldByName('xh').AsString;
    AdoQuery2.FieldByName('Total').AsString:=AdoQuery1.FieldByName('Total').AsString;
    AdoQuery2.Post;
      

  3.   

    正如楼上说的那样,因为你没有post。其实 Adoquery2.ExecSQL; 这句是没有用的,
    前面的几条是在 AdoQuery2.Insert 前自动post的,所以最后一条就没有被保存了,如 dulei115 这样的修改就可以了。