在Delphi中,每当我使用TQuery在数据库上执行SELECT时,我都会使用try.Open跟随Query.Open,最后一部分使用Query.Close。这对我来说很有意义,因为查询仍然会不必要地存储数据(使用内存)。
但我的问题与我使用Query执行INSERT或DELETE时有关,因此需要使用Query.ExecSQL执行SQL 我的问题是,我必须在Query.ExecSQL之后使用Query.Close吗?
我的想法是,因为这是一个要在数据库上执行的命令,可能不会向Query返回任何数据,所以不需要进行Query.Close 但也许有人对Query.ExecSQL被调用后可以返回并存储在查询中的内容有更深入的了解,对于这些查询,Query.Close会有什么用处?
谢谢。
答案 0 :(得分:4)
不需要它,因为ExecSQL
没有维护记录集。
来自documentation(强调我的):
执行查询的SQL语句。调用ExecSQL来执行 当前分配给SQL属性的SQL语句。使用ExecSQL 执行不将游标返回给数据的查询(例如INSERT, 更新,删除和创建表)。
注意:对于SELECT语句,请调用Open而不是ExecSQL。
如果尚未准备好,ExecSQL会在SQL属性中准备该语句以供执行。为了提高性能,应用程序通常应该在第一次调用ExecSQL之前调用Prepare。