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的時候要注意根據實際情況選擇適當的方法, 不要被手冊誤導。