组表中的实表,和普通的序表类似,其中的记录是可以增删或修改的。我们通过下面的例子来了解如何修改实表中的记录:
| 
 | A | B | 
| 1 | =file("D:/file/dw/employees.ctx") | 
 | 
| 2 | =A1.create() | =A2.attach(stable) | 
| 3 | =A2.cursor(;EID==3).fetch() | =B2.cursor(EID,OCount,OAmount;EID<20).fetch() | 
| 4 | =A3.derive() | =B3.derive() | 
| 5 | >A4.run(EID=0) | >B4.run(OCount=0) | 
| 6 | =A2.update@n(A4) | >B2.update(B4) | 
| 7 | =A2.cursor().fetch() | =B2.cursor(;EID<20).fetch() | 
在这里,打开11.1.组表的生成 中使用的组表employees.ctx,A2和B2中分别打开基表和附表stable。A4中取出编号为3的员工记录如下:

为了保留原始值以作对比,在A4中,将A3中数据复制,并在A5中改变了EID,A4中数据如下:

在A6中调用T.update(P) 函数,更新实表T,在这里添加了@n选项,能够返回有变化的记录,返回的就是A4中改变的记录。在A7中,重新从组表基表中取出数据如下:

执行T.update(P) 函数时,将会比较P与T的键值,更新对应的记录。可以发现,在改变了键值EID的情况下,原记录并没有被删除,而是具有新键值的记录被添加到实表中,新记录被添加到实表中时,主键仍然会保持有序。如果需要在更新时只处理更新,则可以添加@u选项,此时新的键值将被忽略。类似的,也可以添加@i选项,仅处理需要添加的记录。
再来看批量修改数据的情况,B4中取出EID小于20的所有销售员记录,注意为了保证更新时的结构统一,这里必须仅获取销售员实表stable本身的字段,结果如下:
在B5中将这些数据复制,并在B6中修改OCount字段的值,修改后结果如下:

在B7中,用B5中修改过的数据来更新实表stable。更新后,在B8中,重新在实表中取出EID小于20的销售人员记录,结果如下:

可以看到,实表中对应的数据被修改了。
如果需要删除记录,可以使用T.delete(P) 函数,如:
| 
 | A | B | 
| 1 | =file("D:/file/dw/employees.ctx") | 
 | 
| 2 | =A1.create() | =A2.attach(stable) | 
| 3 | =A2.cursor().fetch() | =B2.cursor().fetch() | 
| 4 | =A3.select(EID<1) | =B3.select(EID<20) | 
| 5 | >A2.delete(A4) | =B2.delete@n(B4) | 
| 6 | =A2.cursor().fetch() | =B2.cursor().fetch() | 
| 7 | 
 | >B2.update(B4) | 
在A5中选出将要删除的记录:

A6中删除记录后,A7中读出实表中的数据如下:

在B5中选出了附表stable中EID小于20的记录,准备将它们全部删除:

B6中调用delete时,添加了@n选项,此时将返回被删除的记录,B6中的结果和B5中是相同的。删除执行后,在B7中重新从实表etable中取出数据如下:

和前面例子的结果对比,可以发现B5中EID小于20的记录都被删除了。
最后,在B8中,将stable中被删除的数据重新添加到实表中,以免影响数据的使用。
执行update或者delete时,如果实表有索引,将会自动更新。