全國計算機等級考試二級Delphi輔導(dǎo)講義 171

字號:

17.4 動態(tài)SQL語句的編程
    在17.3節(jié)中,我們已經(jīng)介紹了動態(tài)SQL語句(又被稱為參數(shù)化的SQL語句),在其中包含在程序過程中可以變化的參數(shù),在實際的程序設(shè)計中使用得更多的是動態(tài)SQL語句,因而在這一節(jié)里我們重點介紹如何給動態(tài)SQL語句的參數(shù)賦值,以在應(yīng)用程序中靈活地使用SQL語句。動態(tài)SQL語句的編寫、執(zhí)行等等與17.3節(jié)中介紹的SQL語句的編寫、執(zhí)行是一樣的。
    動態(tài)SQL語句中的參數(shù),我們可以通過兩種途徑來為它賦值:
    1. 利用參數(shù)編輯器(Parameter Editor)來為參數(shù)賦值
    具體方法是:選中TQuery部件,單擊鼠標(biāo)右鍵,然后從中選擇Define Parameters 便可以打開參數(shù)編輯器。
    例如,在TQuery部件的SQL屬性中我們設(shè)置如下的SQL語句:
    Setect * From Customer Where CustNO=:Number;
    TQuery的DatabaseName屬性為DBDEMOS,其中Number為參數(shù)變量。我們便可以為參數(shù)Number賦值,在Datetype組合框中選擇該參數(shù)的數(shù)據(jù)類型為整數(shù)Integer,在Value編輯框中可以為參數(shù)Number賦一個值,也可以單擊Null Value檢查框為參數(shù)Number賦一個空值Null。給參數(shù)賦值之后,單擊OK按鈕,這樣TQuery部件中的SQL 查詢便準(zhǔn)備好了,而且參數(shù)值也被賦給了動態(tài)SQL語句中相應(yīng)的參數(shù),此時當(dāng)把TQuery 部件的Active屬性設(shè)置成True時,在與TQuery部件相連的數(shù)據(jù)瀏覽部件中會顯示出查詢結(jié)果,通過參數(shù)編輯器為參數(shù)賦值,這種方式缺乏應(yīng)有的靈活性,在實際應(yīng)用中用得較少,在實際應(yīng)用中程序設(shè)計人員希望用更靈活方便的方式為參數(shù)賦值,那就是我們接下來要介紹的另一種途徑:
    2. 在運行過程中,通過程序為參數(shù)賦值
    用這種方式為參數(shù)賦值有三種方法:
    ①根據(jù)參數(shù)在SQL語句中出現(xiàn)的順序,設(shè)置TQuery部件的Params屬性值為參數(shù)賦值。
    ②直接根據(jù)SQL語句中各參數(shù)的名字,調(diào)用ParamByName方法來為各參數(shù)賦值。
    ③將TQuery部件的DataSource屬性設(shè)置為另一個數(shù)據(jù)源,這樣將另一個數(shù)據(jù)源中與當(dāng)前TQuery部件的SQL語句中的參數(shù)名相匹配的字段值賦給其對應(yīng)的參數(shù)。
    這三種方法我們將在下面的三小節(jié)中具體地介紹
    17.4.1 使用Params屬性為參數(shù)賦值
    TQuery部件具有一個Params屬性,它們在設(shè)計時不可用,在程序運行過程中可用,并且是動態(tài)建立的,當(dāng)為TQuery部件編寫動態(tài)SQL 語句時, Delphi 會自動地建立一個數(shù)組Params,數(shù)組Params是以0下標(biāo)開始的,依次對應(yīng)動態(tài)SQL 語句中的參數(shù), 也就是說動態(tài)SQL語句中第一個參數(shù)對應(yīng)Params[0],第二個參數(shù)對應(yīng)params[1],依此類推。
    例如:一個TQuery部件Query1,我們?yōu)樗帉懙膭討B(tài)SQL語句是:
    Insert Into Customer(CustNo,Name,Country)
    Values(:CustNo,:Name, : Country)
    對于上述這條動態(tài)SQL語句中的參數(shù),我們可以利用TQuery部件的params 屬性為參數(shù)賦值:
    Query1.params[0].AsString := "1988";
    Query1.params[1].AsString := "Lichtenstein";
    Query1.params[2].AsString := "USA";
    上述語句將把"1988"賦給參數(shù):Cuse_No,"Lichtenstein"賦給參數(shù):Name,"USA"賦給參數(shù):Country。