当删除当前(鼠标选中的)行时,会自动删除两行,这是为什么?
语句是这样的:
self.adoquery1.edit;
self.adoquery1.delete;
// adoquery1 是连接数据表格的控件。求解答。。

解决方案 »

  1.   

    删除之前不需要执行edit,edit只是用于编辑记录时候用的。
      

  2.   

    可是删掉了adoquery1.edit之后,依然会删除两行,这是为什么呢?
      

  3.   

    这个可能要看一下代码才好说,你可以把self.adoquery1.delete也注释掉看看会不会删除。(不明白你干嘛要写self在前面,难道你的参数里面有何adoquery1重名吗?)
      

  4.   

    注释掉adoquery1.delete后就一行都不会删除了。
    就是 adoquery1.delete删掉了两行数据。
    并且我试过了,只要的adoquery1.delete之前加一个打印语句:
    showmessage(aodquery1.fieldbyname['id']),
    然后执行adoquery1.delete, 这样的话删除时 就只删除一行。
    这是为什么呢?会不会是 数据库table的问题。我在adoquery1所连接的数据表中 只设置了自动增加的 primary key, 没有其他设置。
    这个问题挺急的,继续求教
      

  5.   

    認真檢查一下代碼必要時把你的代碼全部貼出來,是不是delete前有其它的語句執行。。procedure TRes_Cq_HrQj_F.btnSB_DelClick(Sender: TObject);
    begin
      inherited;
      if not qry_hrqj.IsEmpty then
      begin
        if (qry_hrqj.FieldByName('FLAG').AsInteger=3)or(qry_hrqj.FieldByName('FLAG').AsInteger=2)or(qry_hrqj.FieldByName('FLAG').AsInteger=1) then
        begin
          MessageDlg('操作提示:當前單據已經“簽核”,不能進行“刪除”操作喲!',mtWarning,[mbOK],0);
          Exit;
        end else
        begin
          if MessageDlg('操作提示:你確定要“刪除”這筆請假數據嗎?',mtWarning,[mbYes,mbNo],0)=mryes then
          begin
            qry_hrqj.Delete;
          end else
            Abort;
        end;
      end else
      MessageDlg('操作提示:請假單數據為空,不能執行“刪除”操作喲!',mtWarning,[mbOK],0);
      Exit;
    end;
      

  6.   

    代码是这样的:procedure TIMportFrm.deleteactionExectue(Sender:Tobject)
    begin
    if not (adoquery1.eof) then
    begin
    //showmessage(adoquery1.fieldbyname('num').asstring);
    adoquery1.edit; 
    adoquery1.delete;
    statusBar1.panels[0].text:='   '+inttostr(adoquery1.recordcount)+' 条记录';
    end;
    end;
    如果不注释掉按个 showmessage 语句, 那么就只删除 一行。求解。。
      

  7.   

      if not adoquery1.IsEmpty then
      begin
        adoquery1.Delete;
      end;
      

  8.   

    刪除前為什麼還要edit呢
    你的表架構是怎樣的業務需求是什麼???表有沒有主key...
    如果目的只是為了delete一條數據,利用上面的數據集方法是最簡單實用的了
      

  9.   

    adoquery1 里的语句是一个表,还是视图,或是一个组合的查询语句?
    把SQL语句贴出来看看才知道?
      

  10.   

    adoquery1里的语句只这样的:with aoduqery1 do
    begin
    close;
    sql.clear;
    sql.add('select *, conver(varchar(20),declaretime,111) declaredate from zeroinfor where xianname='+ quotedstr(xianname));
    open;
    end;
    end;zeroinfor 是一个 table, xianname 是其中的一个字段。convert 语句是为了让 datetime 格式的时间 以 2010/2/15 这样的格式 显示出来。
    adoquery查询出来的内容 显示到了 dbgrid上,当dbgrid的某一行用鼠标上时,点击 删除 按钮,执行删除的函数:procedure TIMportFrm.deleteactionExectue(Sender:Tobject)
    begin
    if not (adoquery1.eof) then
    begin
    //showmessage(adoquery1.fieldbyname('num').asstring); 
    adoquery1.delete;
    statusBar1.panels[0].text:='   '+inttostr(adoquery1.recordcount)+' 条记录';
    end;
    end;这时就会删除两行(相邻的)数据。
    如果不注释掉按个 showmessage 语句, 那么就只删除 一行。大侠们帮帮忙!!
      

  11.   

    你可以这样试试,鼠标点击最后一条信息,然后删除,看看是不是删除两行数据?另外考虑用adotable来处理看看。
      

  12.   

    想问一下楼主用的delphi是哪个版本的?
      

  13.   

    我用的是 delphi 7。 
    如果 鼠标点击最后一条信息,然后删除, 那么会把最后两条 信息 都删除
      

  14.   

    var
      iNum:Integer=0;
    procedure TIMportFrm.deleteactionExectue(Sender:Tobject)
    begin
      Inc(iNum);
      Self.Caption := IntToStr(iNum);
    if not (adoquery1.eof) then
    begin
    //showmessage(adoquery1.fieldbyname('num').asstring); 
    adoquery1.delete;
    statusBar1.panels[0].text:='   '+inttostr(adoquery1.recordcount)+' 条记录';
    end;
    end;看看是否执行两次