程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 第十七章-SQL編程(一)(3)

第十七章-SQL編程(一)(3)

編輯:Delphi

17.3.3 通過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。

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

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

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

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

False False 只讀數據

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

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

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

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

17.4 動態SQL語句的編程

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

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

1. 利用參數編輯器(Parameter Editor)來為參數賦值

具體方法是:選中TQuery部件,單擊鼠標右鍵,然後從中選擇Define Parameters 便可以打開參數編輯器。 

例如,在TQuery部件的SQL屬性中我們設置如下的SQL語句: 

Setect * From Customer Where CustNO=:Number;

TQuery的DatabaseName屬性為DBDEMOS,其中Number為參數變量。我們便可以為參數Number賦值,在Datetype組合框中選擇該參數的數據類型為整數Integer,在Value編輯框中可以為參數Number賦一個值,也可以單擊Null Value檢查框為參數Number賦一個空值Null。給參數賦值之後,單擊OK按鈕,這樣TQuery部件中的SQL 查詢便准備好了,而且參數值也被賦給了動態SQL語句中相應的參數,此時當把TQuery 部件的Active屬性設置成True時,在與TQuery部件相連的數據浏覽部件中會顯示出查詢結果,通過參數編輯器為參數賦值,這種方式缺乏應有的靈活性,在實際應用中用得較少,在實際應用中程序設計人員希望用更靈活方便的方式為參數賦值,那就是我們接下來要介紹的另一種途徑:

2. 在運行過程中,通過程序為參數賦值

用這種方式為參數賦值有三種方法:

①根據參數在SQL語句中出現的順序,設置TQuery部件的Params屬性值為參數賦值。

②直接根據SQL語句中各參數的名字,調用ParamByName方法來為各參數賦值。

③將TQuery部件的DataSource屬性設置為另一個數據源,這樣將另一個數據源中與當前TQuery部件的SQL語句中的參數名相匹配的字段值賦給其對應的參數。

這三種方法我們將在下面的三小節中具體地介紹

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved