当我尝试对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;
答案 0 :(得分:5)
您不能在同一SQL上调用Open
和ExecSQL
,因为它们做的是不同的事情。
在查询将返回结果集时使用Open
,这意味着SELECT
。当查询没有不返回结果集时使用ExecSQL
,这意味着返回INSERT
,DELETE
或UPDATE
。
我无法告诉您哪种情况适合您的情况,因为您没有在帖子中包含SQL。
答案 1 :(得分:0)
我不特别了解FireDAC,但是通常使用这类数据库组件,对于不返回结果集的查询(因此适用于ExecSQL),您需要在Connection对象(在本例中为TFDConnection)上使用ExecSQL 。 (大概是您的FDQuery对象连接到的Connection对象。) http://docwiki.embarcadero.com/RADStudio/Rio/en/Executing_Commands_(FireDAC) 显然,TFDCustomQuery上有一个ExecSQL方法,但我不确定为什么要使用它,并且如您所发现的,如果查询已在使用中,它将不起作用。