Delphi: Невозможно выполнить эту операцию с открытым набором данных - PullRequest
0 голосов
/ 07 марта 2019

Когда я пытался использовать 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;

Ответы [ 2 ]

5 голосов
/ 07 марта 2019

Нельзя вызывать Open и ExecSQL на одном и том же SQL, потому что они делают разные вещи.

Используйте Open, когда запрос вернет набор результатов, что означает SELECT. Используйте ExecSQL, когда запрос не возвращает набор результатов, что означает INSERT, DELETE или UPDATE.

Я не могу сказать вам, какое из них применимо к вашей ситуации, потому что вы не включили свой SQL в свой пост.

0 голосов
/ 20 апреля 2019

Я не знаю конкретно о FireDAC, но в целом с такими компонентами баз данных, для запросов, не возвращающих набор результатов, таким образом, подходящих для ExecSQL, вы хотели бы использовать ExecSQL для объекта Connection, в данном случае TFDConnection,(Предположительно, это будет объект Connection, с которым связан ваш объект FDQuery.) http://docwiki.embarcadero.com/RADStudio/Rio/en/Executing_Commands_(FireDAC) Очевидно, что в TFDCustomQuery есть метод ExecSQL, но я не уверен, почему вы бы это использовали, и, как вы обнаружили, онне работает, если запрос уже используется.

...