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