1. 程式人生 > >delphi學習點滴——使用Query控制元件的兩個技巧

delphi學習點滴——使用Query控制元件的兩個技巧

 用Delphi做過資料庫程式設計的朋友肯定熟悉Query控制元件,這個控制元件實現的功能是執行一條SQL語句或一個SQL指令碼,在我們進行資料庫開發中使用的頻率非常高。筆者在多年的使用過程中發現用好這個控制元件有兩點要非常注意。
  
  第一點是:區分好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上的鎖,這樣死鎖的發生概率可以大大減少。避免死鎖,對我們將來進行大型資料庫開發尤為重要。"