q:手册中关于怎样使用tquery 的误导
a:用delphi开发数据库时经常会用到tquery, 手册中有很多关于它的例子, 大致结构如下:
query1.close;
query1.parambyname('id').asstring := '001';
query1.open;
string := query1.fieldbyname('id').asstring;
很多用户根据这段例子开发时会遇到速度慢, 资源耗用多, 甚至引发资源不足的异常。 这是为什么呢, 其实是手册的例子有些片面, 误导了大家。
delphi有一个重要的特性是db aware, 把dbgrid与query连接在一起, query的结果集就会自动的显示在dbgrid中。 为了保证dbgrid总显示查询结果, 需要query总保持active。 当修改query的查询条件时, 先关闭query, 修改完查询条件以后再打开它。 这就是上面代码的含义。
问题是,当query不和db aware组件连接时, 比如在计算字段的事件中取其它表的内容, 应该怎样写代码。 这时候不需要让query保持active, 相反, 为了减少不必要的浪费, 应该是保持deactive。 所以代码应该如下:
query1.parambyname('id').asstring := '001';
query1.open;
string := query1.fieldbyname('id').asstring;
query1.close;
您在使用query的时候要注意根据实际情况选择适当的方法, 不要被手册误导。