Delphi 操纵数据集的状态
Delphi manipulate state of Dataset
有没有办法在删除、编辑或插入之前修改我的数据集 (TTAble) 的状态?
我尝试使用Table1.State := dsXXX
。编译器告诉我不能修改这个属性。
您可以这样做,但要小心,您所做的不会破坏 TDataSet 的状态模型。
您需要声明您正在使用的 TDataSet 类型的后代 class。例如
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
是自找麻烦。 DBClient.Pas,fwiw.
中的几个地方使用了 SetTempState
属性State
(继承自classTDataSet
)是只读的。你不应该直接操纵它。
到delete/edit/insert一条记录使用各自的方法Delete
/Edit
/Insert
。他们按设计更改 State
的值。
大概(因为您没有提供任何关于您正在做什么或尝试过的信息),您要求修改 State
因为您收到类似
的错误消息
DataSet not in edit mode.
这是因为只有在调用Open
方法打开数据集后才能进行数据操作。
有没有办法在删除、编辑或插入之前修改我的数据集 (TTAble) 的状态?
我尝试使用Table1.State := dsXXX
。编译器告诉我不能修改这个属性。
您可以这样做,但要小心,您所做的不会破坏 TDataSet 的状态模型。
您需要声明您正在使用的 TDataSet 类型的后代 class。例如
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
是自找麻烦。 DBClient.Pas,fwiw.
属性State
(继承自classTDataSet
)是只读的。你不应该直接操纵它。
到delete/edit/insert一条记录使用各自的方法Delete
/Edit
/Insert
。他们按设计更改 State
的值。
大概(因为您没有提供任何关于您正在做什么或尝试过的信息),您要求修改 State
因为您收到类似
DataSet not in edit mode.
这是因为只有在调用Open
方法打开数据集后才能进行数据操作。