我想删除一条指定记录,但是每次都是删除的第一条记录,是怎么回事?代码如下with dm.ADOQuery6 do begin
  close;
  sql.Clear;
  sql.Add('select * from pack');
  open;
  if Eof then begin
          Close;
          ShowMessage('记录为空!');
          exit;
          end
          else
if messagedlg('记录将被删除!确认吗?',mtconfirmation,[mbYes,mbNo],0)=mrYes then
begin
with dm.ADOQuery6 do begin
    delete;
    close;
    sql.Clear;
    sql.add('select * from pack order by 日期 asc');
    open;
    end;
    end;

解决方案 »

  1.   

       这段代码如果删除指定记录,的确有问题。可以这么说,这段代码就是删除指定表的第一行数据用的。
       sql.Add('select * from pack'); 
       open; 
       现在默认的游标是在第一条。所以后续执行delete 删除的就是第一行。
       想要删除指定记录,不妨换个思路:
          sql.Add('delete from  pack where "条件");
         dm.ADOQuery6.excute;
      

  2.   

    with dm.ADOQuery6 do 
    begin
    //  close;
    //  sql.Clear;
    //  sql.Add('select * from pack');
    //  open;
      if isEmpty then 
         begin
              Close;
              ShowMessage('记录为空!');
              exit;
         end
         else
         if messagedlg('记录将被删除!确认吗?',mtconfirmation,[mbYes,mbNo],0)=mrYes then
            begin
    //        with dm.ADOQuery6 do begin
                delete;
                UpdateBatch;
    //            close;
    //            sql.Clear;
    //            sql.add('select * from pack order by 日期 asc');
    //            open;
              end;
            end;
    end;