2014-10-03 3 views
4

В Delphi, когда я использую TQuery для выполнения SELECT в базе данных, я следую Query.Open с попыткой. Наконец, с Query.Close в секции finally. Это имеет смысл для меня, поскольку Query все равно будет хранить данные (используя память) без необходимости иначе.Есть Query.Close необходимо после Query.ExecSQL?

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

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

спасибо.

+0

Он всегда будет возвращать что-то, обновленные или вставленные строки, например. Насколько я могу судить, вам всегда нужно закрыть запрос. – CiucaS

+0

Я никогда не делаю этого после ExecSQL. Как только вы очистите свойство SQL, набор данных все равно будет закрыт. Я не думаю, что это болит в любом случае. –

+2

'Open' и' Close' - это просто альтернативы для установки свойства 'Active' на' True' или 'False' соответственно. После вызова 'ExecSQL' проверьте значение' Active', и вы получите ответ. –

ответ

4

Не требуется, поскольку ExecSQL не поддерживает набор записей.

из documentation (курсив мой):

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

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

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