if not query.active then query.open;
query.edit;
dbgrid1.fields[3].text='0';
query.post;

解决方案 »

  1.   

    to Esengnet(Esengnet) cannot modify on a read-only dataset;
      

  2.   

    "cannot modify on a read-only dataset"
    query1.requestlive := true;
      

  3.   

    to yansea(思宏) 
    我还没有试,如果可以改变数据,是不是将查询的基表数据也改了?
      

  4.   

    为Query1指定一个UpdateSQL ,并把cachedUpdate设为true:
        Query1.UpdateObject = UpdateSQL1
        Query1.Cachedupdate = true
    这种用法本来是为缓存更新用的,可以拿来“骗”一下Delphi,使得Query1可以编辑,因为你根本就不会执行ApplyUpdate,呵呵。。
      

  5.   

    to shao528(红雪) 如果,通过SQL查询数据集,要实现实要改变多个数据表,可以怎样实现?
      

  6.   

    如果执行ApplyUpdate是不是相应改变了对应表的对应记录的数据?
      

  7.   

    这个是通过设置TUpdateSQL中的SQL来实现的,不过好像只能指定一个表进行更新(多表我没试过),如果要实现多表更新的功能,可以自己在BeforePost和BeforeDelete事件中用SQL语句直接往数据库中操作。或者用ADOQuery,就没这么麻烦,不管你SQL怎么写,当它是一个Table就行,直接Post。