使用SQL可不可以修改当前数据指针所指向的记录的数据,就象使用
Table1->Field[0]->Value = Value;这么简单。我使用Query1->Field[0]->Value  = 1,会抛出一个"不能修改只读的数据集"的异常。

解决方案 »

  1.   

    你没理解 Query和Table的区别,
    看看理论书,理解一下表和视图的区别。
      

  2.   

    你这个SQL返回的记录集是不是以只读方式返回的啊?
      

  3.   

    看看Query1的属性RequestLive是否为true。
      

  4.   

    1.问Mr_Bean(笑熬浆糊):不好意思,什么是游标啊?
    2.对goldendays(冻冻):谢谢!
    3.问pazee(耙子):可以简单说一下表和视图的关系吗?我在书上找不到。是不是表是实际数据的载体,不可视;视图是可视的。这跟Query和Table有什么区别呢?
      

  5.   

    其实这方面的资料很多数据库的理论书上都有的讲(我上学的时候学过,但是当时没理解)
    简单的说
    视图是一个从表或者多个表得到的数据集,可以理解为经过加工的数据,它不一定能和原来表存在简单映射关系。他的修改,最终需要反映到表上面,所以,它能否被修改需要很多条件限制,因为数据引擎可能没办法知道视图中某个元素如何去对应原来的表,不像其他人说的简单的一个RequestLive变为True就行的。
    而表示可以修改的。比如
     select a, sum(b), sum(c)
       from table1
       group by a这样的Query得到的结果 RequestLive是不可能变成True,不同的数据引擎对于视图可修改的条件是不同,BDE严格些,ADO宽松些。但是有些视图是绝对不能直接修改的,比如使用了join的,多个表返回查询结果的等等。
    你可以通过判断 CanModify 属性来知道Query的结果是否可修改,如果是True,RequestLive 才能设为 true,否则永远是flase的。BDE的严格甚至限制了非主键(或者索引)排序的结果,就是说,如果你得order by xxx,这个xxx 没有索引,这个视图就是只读的。BDE提供了 TUpdateSQL 来修改只读视图,他的功能是强大的,因为它允许你自己写修改视图的SQL,所以,理论上它能修改任何只读视图,当然这个修改最终是通过SQL完成的,所以他实际修改的是表本身,而不是视图。