我用dbgrid来显示数据,用的是query.
我想实现:当鼠标右键单击时,在菜单中有"删除全部"和"删除该记录".
删除全部可以:
begin
try
query1.Close;
query1.SQL.Clear;
query1.SQL.add('delete from gz_xz');
query1.execsql;
query1.Close;
query1.SQL.Clear;
query1.SQL.add('select * from gz_xz');
query1.open;
showmessage('删除成功!');
except
showmessage('删除失败');
end;
end;
但删除选择的那条怎么定位?

解决方案 »

  1.   

    假设FKEY为你的这个数据集的关键字段
    query1.sql.close;
    query1.sql.clear;
    query1.sql.add('delete from gz_xz');
    query1.sql.add('where fkey = '+DBGrid1.DataSource.DataSet.FieldByName('fkey').AsString);
    qquery1.execsql;
    query1.Close;
    query1.SQL.Clear;
    query1.SQL.add('select * from gz_xz');
    query1.open;
    showmessage('删除成功!');
    except
    showmessage('删除失败');
    end;
    end;
    应该可以了,
    只要找出关键字,就写一个条件删除即可~
      

  2.   

    直接用query1.delete删
    query1的当前记录就是dbgrid中被选中的那条
      

  3.   

    query1.SQL.add('delete from gz_xz where 字段名='+dbgrid1.Field[n].AsString);
      

  4.   

    如果要想在删除后仍让焦点停在原来的位置就要加一点儿内容了,方法很多,一般都用书签,我的方法仍是利用关键字
    如下:
    在删除之前保留下一条记录的关键字
    然后在删除刷新之后就
    DBGrid1.DataSource.DataSet.Locate(keyfields,keyvalues,[]);

    query1.Locate(keyfields,keyvalues,[]);
    (~中括号是空的)
      

  5.   

    query1.sql.close;
    query1.sql.clear;
    query1.sql.add('delete from gz_xz');
    query1.sql.add('where C1= '+DBGrid1.DataSource.DataSet.FieldByName('C1').AsString);
    query1.execsql;
    这样写还是不对啊
      

  6.   

    那这样呢!
    query1.sql.close;
    query1.sql.clear;
    query1.sql.add('delete from gz_xz');
    query1.sql.add('where C1= '''+DBGrid1.DataSource.DataSet.FieldByName('C1').AsString+'''');
    query1.execsql;
      

  7.   

    谢谢各位的支持和帮助!!可我的dbgrid中的title改了运行的时候还是数据库中的字段名?
      

  8.   

    回复人: qdmis22(yhy) ( ) 信誉:100  2004-09-21 13:31:00  得分: 0  
     
     
       谢谢各位的支持和帮助!!可我的dbgrid中的title改了运行的时候还是数据库中的字段名?
     
     --------当然还是数据库中的字段名,你只是该了它的显示标题,字段名是不可以修改的,除非你在
    sql语句中用 as 将它该名。
      

  9.   

    删除全部
    with dbgrid.DataSet do
    begin
      first;
      while not eof do 
        delete;
      post;
    end;删除该记录
    with dbgrid.DataSet do
    begin
      delete;
      post;
    end;
      

  10.   

    回复人: xhh_88(三友) ( ) 信誉:105  2004-09-21 13:49:00  得分: 0  
     
     
       回复人: qdmis22(yhy) ( ) 信誉:100  2004-09-21 13:31:00  得分: 0  
     
     
       谢谢各位的支持和帮助!!可我的dbgrid中的title改了运行的时候还是数据库中的字段名?
     
     --------当然还是数据库中的字段名,你只是该了它的显示标题,字段名是不可以修改的,除非你在
    sql语句中用 as 将它该名。
     
     --------------这句话有错。后面的除非是没有道理的,字段名是不可以修改的。