【发布时间】:2016-08-25 13:09:09
【问题描述】:
有没有办法在删除、编辑或插入之前修改我的数据集 (TTAable) 的状态?
我尝试使用Table1.State := dsXXX。编译器告诉我不能修改这个属性。
【问题讨论】:
有没有办法在删除、编辑或插入之前修改我的数据集 (TTAable) 的状态?
我尝试使用Table1.State := dsXXX。编译器告诉我不能修改这个属性。
【问题讨论】:
属性State(继承自类TDataSet)是只读的。你不应该直接操纵它。
要删除/编辑/插入记录,请使用各自的方法Delete/Edit/Insert。它们按设计更改State 的值。
大概(因为您没有提供有关您正在做什么或尝试过的任何信息),您要求修改State,因为您收到类似
数据集未处于编辑模式。
这是因为只有在调用Open 方法打开数据集后才能进行数据操作。
【讨论】:
您可以这样做,但请注意,您所做的并没有破坏 TDataSet 的状态模型。
您需要声明您正在使用的 TDataSet 类型的后代类。例如
type TmyTTable = Class(TTable);
然后通过将数据集转换为该类型,您可以在其上使用SetTempState 和RestoreState:
SaveState := Table1.State;
try
TmyTTable(Table1).SetTempState();
// do something
finally
TmyTTable(Table1).RestoreState(SaveState);
end;
不过,您确实应该查看 DB.Pas 中 SetTempState 的来源。并且要格外小心——使用SetTempState 是在自找麻烦。 SetTempState 在 DBClient.Pas 中的几个地方使用,fwiw。
【讨论】: