Delphi和Firedac:查询活动vs查询打开

Delphi和Firedac:查询活动vs查询打开,delphi,firedac,Delphi,Firedac,我的应用程序的大多数表单都使用2个或更多的db网格:基本上,用户在主网格中单击一条记录,然后在辅助网格中获取子结果 我的所有主要数据库网格fdquerys(即带有SELECT的查询)都已在表单上设置,但没有一个是“活动”的,它们在FormShow上启动 我注意到,无论我写什么: FDQuery1.Active := True; 或 结果是一样的:我的行显示在主DBGrid中 因此,我在FormClose上调用Close或Active:=False 但是这些方法之间肯定有区别,这就是我的问题的主

我的应用程序的大多数表单都使用2个或更多的db网格:基本上,用户在主网格中单击一条记录,然后在辅助网格中获取子结果

我的所有主要数据库网格
fdquerys
(即带有SELECT的查询)都已在表单上设置,但没有一个是“活动”的,它们在
FormShow
上启动

我注意到,无论我写什么:

FDQuery1.Active := True;

结果是一样的:我的行显示在主DBGrid中

因此,我在
FormClose
上调用
Close
Active:=False

但是这些方法之间肯定有区别,这就是我的问题的主题:
Query.Open
Query.Active:=True

如果有任何显著差异,我应该使用什么

提前谢谢

数学,当你花时间回答我的问题时,越来越少的noob:)

旁注:我的INSERT和UPDATE查询是用一个CLEAR then、SQL.ADD、Parameters声明和最后一个ExecSQL设置的

旁注:我的INSERT和UPDATE查询设置为CLEAR then, 添加,然后是参数声明,最后是ExecSQL

Active
Open
之间没有区别。(参见whosrdaddy注释)它们做了相同的事情-数据集变为Active并从SELECT语句返回结果

您还可以使用属性
Active
检查数据集是否处于活动状态,例如:

if not MyQuery.Active then 
  MyQuery.Open; // or MyQuery.Active := true;

ExecSQL执行不将光标返回数据的查询(例如插入、更新、删除和创建表)。

活动是一个属性,打开是一个方法。当Active设置为true时,它调用Open方法,当它设置为false时,它调用Close方法。Active很有用,因为它可以用于检查数据集是否实际打开

if Qry.Active then DoSomething;

它们是一样的。具有活动属性的原因是,可以在设计时从对象检查器中激活查询。将
Active
设置为True内部调用
Open
。我更喜欢
Open/Close
方法,因为很清楚这些方法的作用(代码可读性)。询问查询是否处于
Active
状态并按该状态进行操作是一种代码气味。虽然您是正确的,但我在这里发现的主要区别是,
Active
是一个可在设计时使用的已发布属性,而
Open
是一个只能在运行时使用的方法。我支持自描述性代码,所以我个人更喜欢
Open
/
Close
pair。
if Qry.Active then DoSomething;