【问题标题】:Delphi manipulate state of DatasetDelphi 操作数据集的状态
【发布时间】:2016-08-25 13:09:09
【问题描述】:

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

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

【问题讨论】:

    标签: delphi dataset


    【解决方案1】:

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

    要删除/编辑/插入记录,请使用各自的方法Delete/Edit/Insert。它们按设计更改State 的值。

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

    的错误消息

    数据集未处于编辑模式。

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

    【讨论】:

    • "只有在打开数据集后才能进行数据操作" 是的,但是由于在 gui 中很可能会出现一个封闭的数据集,因此这个 eo​​or 消息可能更可能是由于省略了调用编辑或插入。
    【解决方案2】:

    您可以这样做,但请注意,您所做的并没有破坏 TDataSet 的状态模型。

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

    type TmyTTable = Class(TTable);
    

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

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

    不过,您确实应该查看 DB.Pas 中 SetTempState 的来源。并且要格外小心——使用SetTempState 是在自找麻烦。 SetTempState 在 DBClient.Pas 中的几个地方使用,fwiw。

    【讨论】:

      猜你喜欢
      • 2014-05-04
      • 2020-08-24
      • 2018-10-03
      • 1970-01-01
      • 1970-01-01
      • 2017-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多