我选中了网格里面的某条记录、然后想把它删除、代码如下
我用的是Query组件、数据库是SQL2000
代码如下:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
      Query1.requestLive:=true;
      Query1.Delete;
end;
怎么提示说:table is read only啊  /我没用到table啊、怎么搞的
 

解决方案 »

  1.   

    Query1 里的sql语句条件不能太复杂,你把sql语句的where语句去掉一定可以的。
      

  2.   

    Query的Requestlive只对文本数据库有效,对于SQL_SERVER和ORACLE这样的数据库是没有作用的,建议你用TABLE的FIlted属性将纪录过滤后显示在DBGRID中,这样就可以编辑了
      

  3.   

    呵呵!是将Filtered属性设为TRUE
    然后在
    procedure TForm1.Table1FilterRecord(DataSet: TDataSet;
      var Accept: Boolean);
    beginend;
    中写过滤条件
      

  4.   

    Query1.Cached := True;
     Query1.requestLive := True;
    同时对Query1的语句也有限制,如不能有连接、Order By
      

  5.   

    还是不要动态设置Query1.requestLive:=true;
    控件一放上去就Query1.requestLive:=true然后不变。你可以通过设置表格的ReadOnly来设置只读状态,没必要设置齐相关的Query1的
    状态。
      

  6.   

    我喜欢用SQL来删除
    query1.sql.text:='delete tablename where 条件';
    query1.execsql;
    好处是:
    1.直接,简单明了,不必考虑众多因素;
    2.效率高——还有比这更快的方法吗?我想没有了;
    设置requestLive相当于使用table,会把整个表的数据读出来,是最低效的查询方法,建议你不要使用;
    3.通用。适用于各种数据库。
      

  7.   

    上面的老兄啊、我知道的、但是我现在是点击网格上的一条记录啊、那个where 条件哪里有啊
      

  8.   

    这好办:
    query2.sql.text:='delete tablename where ID='''+query1.FieldByName('ID').asstring+'''';
    query2.execsql;