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的记录也就是最后一条记录就是没有入库,这是怎么回事啊?
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的记录也就是最后一条记录就是没有入库,这是怎么回事啊?
break;
这句没用,去掉。
//AdoQuery2中保存着PicNum表中每个学号重复的次数
AdoQuery2.Edit;
AdoQuery2.FieldByName('xh').AsString:=AdoQuery1.FieldByName('xh').AsString;
AdoQuery2.FieldByName('Total').AsString:=AdoQuery1.FieldByName('Total').AsString;
AdoQuery2.Post;
前面的几条是在 AdoQuery2.Insert 前自动post的,所以最后一条就没有被保存了,如 dulei115 这样的修改就可以了。