我用query查询一个表,因为我就想在dbgrid中直接修改,所以将requestlive设为true,但系统出错"table is readonly".
很奇怪,sql语句如是"select * from main"时,一点问题没有;但如果我改为
"select id 合同号 from main"就会错.而我想在表格中字段名显示为中文.
我是在程序一执行就运行这个query,应该不存在query间的冲突.
  这个问题已经困扰了我多时,现在我都快急死了,只好来求求各位大虾了.
或者还有什么更好的方法来修改表中的数据,能和dbgrid一样简单直观,又不用
自己写许多代码.
  谢谢!

解决方案 »

  1.   

    "select id 合同号 from main"语句中你把字段id换成其它名字了,不管是换成中文还是英文,都会报readonly错的。
    可以这样解决:
    sql语句用"select id from main";
    在dbgrid中先把字段名加进去:双击dbgrid,弹出Column Editor,添加一个Column,把FieldName设为‘id’,再把Title.Caption设为‘合同号’。
      

  2.   

    我是sql server ,可以排除是数据库问题,因为我用ADO 来连接据不会出现这
    个问题。因为我现在底层已经做好要该的话有点麻烦。
      

  3.   

    TO sysu(死树) :
       你的这种解决方案解决不了我的问题,我是想把 select XXX as fName from table  种的 XXX 统一换成 fName 来,达到底层代码好管理。    谢谢你的回答!!!
      

  4.   

    问题可以这样解决:
      
       对,把cachedupdate属性设为true,然后增加一个tupdatesql控件,在query的updateobject与updatesql关联更新!!!  但是我还是有疑问:
        1. 这是唯一的解决办法吗?还有其它的解决办法吗?
        2. Tupdatesql 是不是为了解决Tquery的这个问题才开发的一个控件?
      
      

  5.   

    呵呵看了一下TUpdateSQL的帮助,好象是哦。
    TUpdateSQL applies cached updates on behalf of queries or stored procedures that can抰 post updates directly.
    Use a TUpdateSQL object to provide SQL statements used to update read-only datasets represented by TQuery or TStoredProc components when cached updates are enabled.
      

  6.   

    用Tupdatesql控件,是为了提交是利用缓存,而不是直接提交而设计的,你是要在DBgrid中直接更改,所以最好使用Tupdatesql控件,这样一旦出错要么所有数据都提交成功,要么全部RollBack.