Нужен ли Query.Close после Query.ExecSQL?

В Delphi всякий раз, когда я использую TQuery для выполнения SELECT в базе данных, я следую за Query.Open с помощью try..finally, с Query.Close в разделе finally. Для меня это имеет смысл, поскольку в противном случае запрос все равно будет хранить данные (используя память) без необходимости.

Но мой вопрос связан с тем, когда я использую Query для выполнения INSERT или DELETE, что требует выполнения SQL с Query.ExecSQL Мой вопрос: должен ли я использовать Query.Close после Query.ExecSQL?

Я думаю, что, поскольку это команда, которая должна быть выполнена в базе данных, которая, по-видимому, не возвращает никаких данных в запрос, нет необходимости выполнять запрос. , во всяком случае, может быть возвращен и сохранен в запросе после вызова Query.ExecSQL, для чего будет полезен Query.Close?

Спасибо.


person Andrew W    schedule 03.10.2014    source источник
comment
Он всегда будет что-то возвращать, например, обновленные или вставленные строки. Насколько я могу судить, вам всегда нужно закрывать запрос.   -  person CiucaS    schedule 03.10.2014
comment
Я никогда не делаю после ExecSQL. Как только вы очистите свойство SQL, набор данных все равно будет закрыт. Я не думаю, что это больно в любом случае.   -  person J__    schedule 03.10.2014
comment
Open и Close — это просто альтернативы для установки свойства Active на True или False соответственно. Проверьте значение Active после вызова ExecSQL, и вы получите ответ.   -  person Disillusioned    schedule 03.10.2014


Ответы (1)


Нет, в этом нет необходимости, так как ExecSQL не поддерживает набор записей.

из документации (выделено мной):

Выполняет оператор SQL для запроса. Вызовите ExecSQL, чтобы выполнить оператор SQL, назначенный в данный момент свойству SQL. Используйте ExecSQL для выполнения запросов, которые не возвращают курсор к данным (например, INSERT, UPDATE, DELETE и CREATE TABLE).

Примечание. Для операторов SELECT вызовите Open вместо ExecSQL.

ExecSQL подготавливает оператор в свойстве SQL к выполнению, если он еще не был подготовлен. Чтобы повысить производительность, приложение обычно должно вызывать Prepare перед первым вызовом ExecSQL.

person whosrdaddy    schedule 03.10.2014