全國計算機等級考試二級Delphi輔導講義 172

字號:

17.4.2 使用ParamByName方法為參數(shù)賦值
    ParamByName是一個函數(shù),用動態(tài)SQL語句中的參數(shù)作為調(diào)用ParamByName函數(shù)的參數(shù),這樣便可以為它們賦值,使用這種賦值方法,必須要知道動態(tài)SQL語句參數(shù)的名字。
    例如在17.4.1節(jié)中的例子中,也可以用下述方法給參數(shù)賦值:
    Query1.ParamByName('CustNo').AsString := "1988";
    Query1.ParamByName('Name').AsString := "Lichtenstein";
    Query1.ParamByName('Country').AsString := "USA";
    使用這種方法同樣可以為各參數(shù)賦值,而且更加直觀一些。
    17.4.3 使用Datasource屬性為參數(shù)賦值
    上述兩種方法的共同特點是:我們在為各參數(shù)賦值時,我們是知道各參數(shù)對應的具體參數(shù)值的。而在具體的應用程序中,有些參數(shù)值常常是無法確定的,例如參數(shù)值來自于另一個查詢結(jié)果,對于這種情況,Delphi提供了使用Datasource屬性為動態(tài)SQL 語句中尚存在沒有賦值的參數(shù)時, Delphi 會自動檢查 TQuery 部件的 Datasource 屬性, 如果為Datasource屬性設置了屬性值(該屬性的值是另一個TDatasource部件的名字),Delphi 會把沒有賦值的參數(shù)與TDatasource部件中的各字段比較,Delphi 會將相應的字段值賦給與其相匹配的參數(shù),利用這種方法也能實現(xiàn)所謂的連接查詢,我們在學習使用TTable部件時,便會創(chuàng)建主要--明細型數(shù)據(jù)庫應用,用TQuery部件創(chuàng)建的連接查詢與主要- -明細型應用是相似的。
    例如:在如圖17.7所示的應用中,設置了下列部件:
    ● 一個TTable部件
    名字為Cust,它的DatabaseName屬性為DEMOS,TableName屬性為Customer。
    ● 一個TDatasource部件
    名字為Custsource,其Dataset屬性被設置為Cust。
    ● 一個TQuery部件
    名字為ORDERS,其DatabaseName被設置為DEMOS,SQL屬性值為:
    Select Orders.CustNo,Orders.OrderNo,Orders.SaleDate FROM Orders
    WHERE Orders.CustNo =: CustNo
    ORDERS的DataSouce屬性被設置為CustSource
    ● 一個TDatasource部件
    名字為OrderSource,其DataSet屬性被設置為Orders。
    ● 兩個TDBGrid部件
    它們分別連接CustSource和OrderSource。
    TQuery部件Orders中的動態(tài)SQL語句中的參數(shù):CustNo在程序設計過程中沒有給它賦值,當該應用程序運行時Delphi會自動地到其Datasource屬性中說明的數(shù)據(jù)源CustSource中查找與參數(shù):CustNo匹配的字段,而CustSource中正好有一個名字為 CustNo 的字段與參數(shù):CustNo匹配,這樣Customer表中的CustNo字段值被賦給了參數(shù) : CustNo , 而當每移動Customer表中的記錄指針,參數(shù):CustNo的值會隨之改變,而參數(shù):CustNo的值發(fā)生改變時,Orders中的動態(tài)SQL語句會根據(jù)新的參數(shù)值重新查詢,從數(shù)據(jù)庫表中獲取相應的訂單數(shù)據(jù),這樣也變實現(xiàn)了類似于主要--明細型應用。即連接查詢。