Open和ExecSQL方法的区别

Delphi的Query控件使用?

Delphi的Query控件

第一点是:区分好Query控件的Open方法和ExecSQL方法。这两个方法都可以实现执行SQL语句,但要根据不同情况分别使用。如果这条SQL语句将返回一个结果集,必须使用Open方法,如果不返回一个结果集,则要使用ExecSQL方法。例如:

……
Query1:Tquery
Query2:Tquery
……
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(‘select * from AA’);
Query1.Open;
……
Query2.Close;
Query2.SQL.Clear;
Query2.SQL.Add(‘delete AA’);
Query2.ExecSQL;
……

上述的例子中,Query1所执行的SQL语句将返回一个结果集,因此必须用Open方法;而Query2所执行的是一条删除表记录语句,不返回结果集,因此用ExecSQL方法。

第二点是:如果Query控件用Open方法执行SQL语句,并且所用的SQL语句访问的是一张或几张频繁使用的表,在执行完SQL语句后,一定要调用SQL的FetchAll方法,能大大地减少死锁发生的概率。例如:

……
Query1:Tquery
……
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(‘select * from AA’);
Query1.Open;
Query1.FetchAll;

……

在 上述的例子中,如果AA是一张被频繁访问的表,在对这个表执行这一条select语句的同时,如果恰好有其他人对这张表执行删除或更新操作,便有可能发生 死锁。Query1.FetchAll这条语句实现的功能是释放加在表AA上的锁,这样死锁的发生概率可以大大减少。避免死锁,对我们将来进行大型数据库 开发尤为重要

大家对 一条SQL 语句
什么时候open 什么时候ExecSQL
都总结 了 什么规律没?


带了select的 不一定是open
但带了INSERT UPDATE DELETE CREATE
的时候 就是 ExecSQL

----------------------------------------------------------------------------?

1、对于所有返回数据集的查询都应该使用.Open,不返回数据集的使用execsql;
?2、对于存储过程,返回数据集(游标)的使用Open,否则使用ExecProc;


用select时,用open
用insert,delete,update时,用execsql.

这句的第一句 不太准确!但多数时候用select时,用open

你可能感兴趣的:(Open和ExecSQL方法的区别)