使用SQL可不可以修改当前数据指针所指向的记录的数据,就象使用
Table1->Field[0]->Value = Value;这么简单。我使用Query1->Field[0]->Value = 1,会抛出一个"不能修改只读的数据集"的异常。
Table1->Field[0]->Value = Value;这么简单。我使用Query1->Field[0]->Value = 1,会抛出一个"不能修改只读的数据集"的异常。
看看理论书,理解一下表和视图的区别。
2.对goldendays(冻冻):谢谢!
3.问pazee(耙子):可以简单说一下表和视图的关系吗?我在书上找不到。是不是表是实际数据的载体,不可视;视图是可视的。这跟Query和Table有什么区别呢?
简单的说
视图是一个从表或者多个表得到的数据集,可以理解为经过加工的数据,它不一定能和原来表存在简单映射关系。他的修改,最终需要反映到表上面,所以,它能否被修改需要很多条件限制,因为数据引擎可能没办法知道视图中某个元素如何去对应原来的表,不像其他人说的简单的一个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完成的,所以他实际修改的是表本身,而不是视图。