熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

DELPHI基礎教程:SQL編程(一)[3]

2013-11-23 17:49:35  來源: Delphi編程 

   使用Visual Query Builder編寫

  客戶/服務器版本的Delphi還包含一個可視化的查詢構造器Visual Query Builder 用這個可視化的工具我們只能編寫Select語句在應用程序窗體中選擇TQuery部件後單擊鼠標右鍵彈出一個彈出式菜單從中選擇Run Visual Query Builder後便會彈出一對話框提示你選擇要訪問的數據庫選擇想要訪問的數據庫之後選擇OK按鈕緊接著會出現一個彈出式對話框提示你選擇要查詢的數據庫表一次可以選擇多個數據庫表若要選擇多個數據庫表每選擇一個表之後單擊Add按鈕接著選擇另一個表選擇完要查詢的表之後單擊Close按鈕這樣可視化的查詢構造器中將會顯示出用戶選擇的數據庫表

  有關如何使用可視化的查詢構造器Visual Query Builder 請參看聯機幫助信息 在Visual Query Builder中構造完一個查詢並退出Visual Query Builder時其中的SQL 命令語句會自動地寫入相應的TQuery部件的SQL屬性

   SQL程序的執行

  在為TQuery部件設置完SQL屬性的屬性值之後也即編寫好適當的SQL程序之後可以有多種方式來執行SQL程序

  在設計過程中設置完TQuery部件的SQL屬性之後將其Active屬性的值置為True這樣便可以執行SQL屬性中的SQL程序如果應用中有與TQuery部件相連的數據浏覽部件( 如TDDGrid TDBEdit等)那麼在這些數據浏覽部件中會顯示SQL程序的執行結果

  在應用程序運行過程中通過程序調用TQuery部件的Open方法或ExecSQL 方法可以執行其SQL屬性中的SQL程序Open方法和ExecSQL方法是不一樣的大家在程序設計過程中一定要注意Open方法只能用來執行SQL語言的查詢語句(Select命令)並返回一個查詢結果集而ExecSQL方法還可以用來執行其它常用的SQL語句(如InsertUPDATE DELETE等命令)例如

  QueryOpen (這樣會返回一個查詢結果集)

  如果調用Open方法而沒有查詢結果時會出錯此時應該調用ExecSQL 方法來代替Open方法

  QueryExecSQL (沒有返回結果)

  當然在設計應用程序時程序設計人員是無法確定TQuery部件中的SQL 語句是否會返回一個查詢結果的對於這種情況應當用Try…Except模塊來設計程序在 Try 部分調用Open方法而在Except部分調用ExceSQL方法這樣才能保證程序的正確運行

  例如

  Try

  QueryOpen

  Except

  QueryExecSQL

  End

  在應用程序中使用TQuery部件時還可以設置它的UniDirectional屬性為True這樣會加快檢索數據庫表的速度但是這樣只能往一個方向移動記錄指針 在缺省情況下UniDirectional屬性的值為False

   通過TQuery部件如何獲得活動的數據

  我們在前面的章節裡介紹TTable部件時我們知道通過TTable部件從數據庫中獲得的數據都是活動的也就是說用戶可以直接通過數據浏覽部件對這些數據進行編輯修改而通過TQuery部件可以獲得兩種類型的數據

  ● 活動的數據

  這種數據就跟通過TTable部件獲得的數據一樣用戶可以通過數據浏覽部件來編輯修改這些數據並且當調用Post方法或當焦點離開當前的數據浏覽部件時用戶對數據的修改自動地被寫回到數據庫中詳細情況請參看第四章數據浏覽部件的應用及編程

  ● 非活動的數據(只讀數據)

  用戶通過數據浏覽部件是不能修改其中的數據在缺省情況下通過TQuery部件獲得的查詢結果數據是只讀數據要想獲得活動的數據在應用程序中必須要設置TQuery部件的RequestLive屬性值為True然而並不是在任何情況下(通過設置RequestLive的屬值True)都可以獲得活動的數據的要想獲得活動的數據除了將TQuery部件的RequestLive屬性為True外BDE要能夠返回活動的數據相應的SQL命令語句還要滿足附錄C中的語法規則和下列的約束條件

  TQuery部件獲得活動的查詢結果數據的約束條件

  當查詢Paradox或dBASE數據庫中的表

  ● 查詢只能涉及到一個單獨的表

  ● SQL語句中不能包含ORDER BY命令

  ● SQL語句中不能含聚集運算符SUM或AVG

  ● 在Select後的字段列表中不能有計算字段

  ● 在Select語句WHERE部分只能包含字段值與常量的比較運算這些比較運算符是 Like><>=<=各比較運算之間可以有並和交運算AND和OR

  當通過SQL語句查詢數據庫服務器中的數據庫表

  ● 查詢只能涉及到一個單獨的表

  ● SQL語句中不能包含ORDER BY命令

  ● SQL語句中不能含聚集運算符SUM或AVG運算

  另外如果是查詢Sybase數據庫中的表那麼被查詢的表中只能有一個索引

  如果在應用程序中要求TQuery部件返回一個活動的查詢結果數據集但是SQL 命令語句不滿足上述約束條件時對於本地數據庫的SQL查詢BDE只能返回只讀的數據集對於數據庫服務器中的SQL查詢只能返回錯誤的代碼當TQuery 部件返回一個活動的查詢結果數據集時它的CanModify屬性的值會被設置成True

  表 TQuery部件返回查詢結果數據的類型

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  RequestLive屬性值 CanModify屬性值 查詢結果的類型

  ────────────────────────────────

  False False 只讀數據

  True(SQL語句滿足約束條件) True 活動數據

  True(SQL語句不滿足約束條件) False 只讀數據

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  當TQuery部件返回只讀的查詢結果數據集而用戶又希望修改這只讀的數據集時一般這樣來處理在應用程序中另外增加一個 TQuery 部件 Query( 假設獲得只讀結果的TQuery部件的名字是Query在Query中設置修改語句UpDATE對Query 中的數據進行修改操作這樣會實現對只讀數據的修改

   動態SQL語句的編程

  在節中我們已經介紹了動態SQL語句(又被稱為參數化的SQL語句)在其中包含在程序過程中可以變化的參數在實際的程序設計中使用得更多的是動態SQL語句因而在這一節裡我們重點介紹如何給動態SQL語句的參數賦值以在應用程序中靈活地使用SQL語句動態SQL語句的編寫執行等等與節中介紹的SQL語句的編寫執行是一樣的

  動態SQL語句中的參數我們可以通過兩種途徑來為它賦值

[]  []  []  []  


From:http://tw.wingwit.com/Article/program/Delphi/201311/25146.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.