Delphi:无法对打开的数据集执行此操作

时间:2019-03-07 12:51:03

标签: mysql delphi firemonkey firedac

当我尝试对MySQL数据库使用FireDAC FDQuery时,出现以下错误:

Cannot perform this operation on an open dataset.
query.Open(....my connection string to MySQL....); 
try
    query.ExecSql;
finally
    query.Close;

我通过双击表单上的图标来填充FDQuery。我也 连接到数据库以对其进行测试。它正确地返回了结果。 我想从代码中使用它,但是它不起作用,所以 我调试了我总是到断点:query.Close;

2 个答案:

答案 0 :(得分:5)

您不能在同一SQL上调用OpenExecSQL,因为它们做的是不同的事情。

在查询将返回结果集时使用Open,这意味着SELECT。当查询没有返回结果集时使用ExecSQL,这意味着返回INSERTDELETEUPDATE

我无法告诉您哪种情况适合您的情况,因为您没有在帖子中包含SQL。

答案 1 :(得分:0)

我不特别了解FireDAC,但是通常使用这类数据库组件,对于不返回结果集的查询(因此适用于ExecSQL),您需要在Connection对象(在本例中为TFDConnection)上使用ExecSQL 。 (大概是您的FDQuery对象连接到的Connection对象。) http://docwiki.embarcadero.com/RADStudio/Rio/en/Executing_Commands_(FireDAC) 显然,TFDCustomQuery上有一个ExecSQL方法,但我不确定为什么要使用它,并且如您所发现的,如果查询已在使用中,它将不起作用。