procedure TFrRowsSelect.BitBtn2Click(Sender: TObject);
var
    i: Integer;
begin
    ADOQuery2.Active := True;
    for i := 0 to xjDBGrid1.SelectedCount - 1 do
    begin
        ADOQuery1.GotoBookMark(Pointer(xjDBGrid1.SelectedRows[i]));
        TranData(ADOQuery2, ADOQuery1, '1');
    end;
end;上段代码意思是从ADOQuery1中选择的多行数据转移到ADOQuery2,第一条能转成功,第二条便出错,信息为:list index out of bounds(3).
请各位高手帮忙解决。谢谢!

解决方案 »

  1.   

    for i := 0 to xjDBGrid1.SelectedCount - 1 do
        begin
            ADOQuery1.GotoBookMark(Pointer(xjDBGrid1.SelectedRows[i]));
            TranData(ADOQuery2, ADOQuery1, '1');
        end;估计你转过去第一条的之后,SelectedRows已经是只有一条数据了,所以越届了,试试:
    while xjDBGrid1.SelectedCount > 0 do
    begin
            ADOQuery1.GotoBookMark(Pointer(xjDBGrid1.SelectedRows[0]));
            TranData(ADOQuery2, ADOQuery1, '1');
    end;