Когда я попытался использовать FireDAC FDQuery с базой данных MySQL, я получил следующую ошибку:
Cannot perform this operation on an open dataset.
query.Open(....my connection string to MySQL....);
try
query.ExecSql;
finally
query.Close;
Я заполнил FDQuery, дважды щелкнув значок в форме. Я также подключился к базе данных, чтобы проверить это. Он вернул результаты правильно. Я хотел бы использовать его из кода, но он не работает, поэтому я отладил его. Я всегда добираюсь до точки останова: query.Close;
Вы не можете вызывать Open
и ExecSQL
на одном и том же SQL, потому что они делают разные вещи.
Используйте Open
когда запрос вернет набор результатов, что означает SELECT
. Используйте ExecSQL
когда запрос не возвращает результирующий набор, что означает INSERT
, DELETE
или UPDATE
.
Я не могу сказать вам, какое из них применимо к вашей ситуации, потому что вы не включили свой SQL в свой пост.
Я не знаю конкретно о FireDAC, но в целом с такими компонентами базы данных, для запросов, не возвращающих набор результатов, таким образом, подходящих для ExecSQL, вы хотели бы использовать ExecSQL для объекта Connection, в данном случае TFDConnection. (Предположительно, это будет объект Connection, к которому подключен ваш объект FDQuery.) Http://docwiki.embarcadero.com/RADStudio/Rio/en/Executing_Commands_(FireDAC) Очевидно, что в TFDCustomQuery есть метод ExecSQL, но я не знаю, зачем вы это используете, и, как вы обнаружили, он не работает, если запрос уже используется.