我用一个DBGrid来显示一张表的所有内容!怎样删除所选的记录!并且保存回数据库?

解决方案 »

  1.   

    dbgrid.datasource.dataset.firt;
    while not dbgrid.datasource.dataset.eof do 
      dbgrid.datasource.dataset.delete;
    dbgrid.datasource.dataset.Post;
      

  2.   

    以下全删除,以下只删除选中的
    dbgrid.datasource.dataset.delete;
    dbgrid.datasource.dataset.Post;
      

  3.   

    dbgrid.datasource.dataset.delete;
    dbgrid.datasource.dataset.Post;
      

  4.   

    to  ljmanage(过客) 我按按照您的办法,得到如提示:ADOtable1:DataSet not in edit or insert mode.
      

  5.   

    ADOtable1.edit;
    dbgrid.datasource.dataset.delete;
    dbgrid.datasource.dataset.Post;
      

  6.   

    var
      i:smallint;
      tmpBookMark :TbookMark;
    begin
      dbGrid.DataSource.DataSet.DisableControls;
      for dbGrid.SelectedCount-1 downto 0 do
      begin
         query1.GotoBook(pointer(dbGrid.selectedRows[i]));
         query1.delete;
      end;
      query1.post;
      dbGrid.DataSource.DataSet.EnableControls;
    end;//query1为dbgrid关联的Query或Table,clientdataset
      

  7.   

    估计你是使用了关联查询(如:select a.*,b.* from aa a,bb a where a.n=b.n),
    否则上面的例子是可以的.
    你还是要使用delete from where....来删除!
      

  8.   

    如果你没有使用关联查询,你可以直接在DBGRIDE 里删除,方法是,
      if DBGrid1.DataSource.DataSet.Bof and DBGrid1.DataSource.DataSet.Eof then exit;
    if (messagedlg('确实要删除这条记录吗?',mtinformation,[mbyes,mbno],0) = mryes) then begin
      DBGrid1.DataSource.DataSet.Delete ;
    如果你使用了关联查询,用这种方法删除你就会把其他表里相关联的字段删除,这时候就得在表里删除,方法是,先用LOCATE 将记录定位到你要删除的记录,然后删除所指记录,例如:     name:=DBGrid1.DataSource.DataSet.FieldValues['name']; 
    ADOTable1.Locate('name',name,[]);
    ADOTable1.Delete;  
    (这儿假设以 name 索引)
      

  9.   

    通过TDbGrid的SelectedRows 来处理,不会还要注意这个会少删一条记录