Delphi 操纵数据集的状态

Delphi manipulate state of Dataset

有没有办法在删除、编辑或插入之前修改我的数据集 (TTAble) 的状态?

我尝试使用Table1.State := dsXXX。编译器告诉我不能修改这个属性。

您可以这样做,但要小心,您所做的不会破坏 TDataSet 的状态模型。

您需要声明您正在使用的 TDataSet 类型的后代 class。例如

type TmyTTable = Class(TTable);

然后通过将数据集转换为该类型,您可以在其上使用 SetTempStateRestoreState

SaveState := Table1.State;
try
  TmyTTable(Table1).SetTempState();
  //  do something
finally
  TmyTTable(Table1).RestoreState(SaveState);
end;

不过,您真的应该看看 DB.Pas 中 SetTempState 的源代码。并格外小心 - 使用 SetTempState 是自找麻烦。 DBClient.Pas,fwiw.

中的几个地方使用了 SetTempState

属性State(继承自classTDataSet)是只读的。你不应该直接操纵它。

到delete/edit/insert一条记录使用各自的方法Delete/Edit/Insert。他们按设计更改 State 的值。

大概(因为您没有提供任何关于您正在做什么或尝试过的信息),您要求修改 State 因为您收到类似

的错误消息

DataSet not in edit mode.

这是因为只有在调用Open方法打开数据集后才能进行数据操作。