在Delphi中打开和关闭数据集

时间:2014-02-10 13:02:24

标签: delphi

假设我的Delphi应用程序中有一个数据集说dsSample。要读取或写入数据集中的数据,必须打开数据集。我只是想知道以下陈述之间有什么区别:

dsSample.Open;
dsSample.Active := True;

and 

dsSample.Close;
dsSample.Active := False;

如果OpenActive执行相同的操作,为什么在Delphi中打开和关闭数据集有两个不同的关键字?

2 个答案:

答案 0 :(得分:6)

使用任何一个都没有什么区别,DataSet.Open方法有一行代码:Active := True。有效的财产将调用SetActiveGetActive。如果按住CTRL并单击OpenActive并读取VCL源代码,知道VCL的一些内部结构将会停止,找出这些内容是相当简单的。你做的事情如下:

if not DataSet.Active then
  DataSet.Open;

而不仅仅是

DataSet.Open;

正如TLama所指出的,Active是一个已发布的属性,可供Delphi IDE使用,允许您在设计时为表单或数据模块上的DataSet进行切换。开放和关闭可能不是严格要求的,但是在许多语言中是相当常见的模式。

答案 1 :(得分:1)

TDataset.Open 程序,因此您无法获取数据集是否填充了数据

procedure TDataSet.Open;
begin
  Active := True;
end;

有效是属性

使用“活动”确定或设置是否使用数据填充数据集。当Active为false时,数据集将关闭;数据集无法读取或写入数据,数据感知控件无法使用它来获取数据或进行编辑。当Active为true时,可以使用数据填充数据集。它可以从数据库或其他来源(例如提供者)读取数据。根据CanModify属性,活动数据集可以发布更改。 将Active设置为true:

  1. 生成BeforeOpen事件。
  2. 将数据集状态设置为dsBrowse。
  3. 建立一种获取数据的方法(通常通过打开游标)。
  4. 生成AfterOpen事件。
  5. 如果在打开数据集时发生错误,则数据集状态将设置为dsInactive,并且任何游标都将关闭。 将Active设置为false:

    1. 触发BeforeClose事件。
    2. 将State属性设置为dsInactive。
    3. 关闭光标。
    4. 触发AfterClose事件。
    5. 在更改影响数据库状态的其他属性或在应用程序中显示数据的控件之前,应用程序必须将Active设置为false。

      注意:调用Open方法将Active设置为true;调用Close方法将Active设置为false。