Delphi、MS SQL Server開發(fā)環(huán)境下存儲過程的使用
發(fā)表時間:2023-08-17 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]曹次華一、概述Delphi + MS SQL Server是目前最為流行的管理信息系統(tǒng)開發(fā)環(huán)境和工具。Delphi的強大數(shù)據(jù)庫操作控件極大地減輕了開發(fā)人員的工作量,在這些控件中,最常用的有TQuer...
曹次華
一、概述
Delphi + MS SQL Server是目前最為流行的管理信息系統(tǒng)開發(fā)環(huán)境和工具。Delphi的強大數(shù)據(jù)庫操作控件極大地減輕了開發(fā)人員的工作量,在這些控件中,最常用的有TQuery、TTable、TADOQuery、TADOTable、TADODataSete等,這些控件執(zhí)行查詢操作時有一個共同的特點,即將所有數(shù)據(jù)庫記錄從服務(wù)器取回客戶端,再根據(jù)查詢的條件進行篩選。很明顯,如果有大量的數(shù)據(jù)在服務(wù)器與客戶端之間傳遞,就會降低程序執(zhí)行的速度,影響應(yīng)用程序的性能。針對這種情況,MS SQL Server數(shù)據(jù)庫和Delphi開發(fā)工具都提供了存儲過程來解決這類問題。存儲過程是一段在服務(wù)器上執(zhí)行的程序,它在服務(wù)器端對數(shù)據(jù)庫記錄進行處理,再把結(jié)果返回到客戶端。通過使用存儲過程,一方面可以利用服務(wù)器強大的計算能力和速度,另一方面避免把大量的數(shù)據(jù)從服務(wù)器下載到客戶端,減少網(wǎng)絡(luò)上傳輸量,服務(wù)器只需將計算結(jié)果傳給客戶端,其效率之高是非常明顯的。
二、創(chuàng)建存儲過程
在MS SQL Server上的存儲過程可分為二類,一類是類似于select 查詢,用于檢索數(shù)據(jù),檢索到的數(shù)據(jù)能夠以數(shù)據(jù)集的形式返回給客戶端,如
CREATE procedure proc1
@dw char(20)
as
select dwdm from cchdwdm where dw=@dw
該存儲過程有一個輸入?yún)?shù) @dwdm,以數(shù)據(jù)集的形式返回結(jié)果。
另一類存儲過程是通過輸出參數(shù)返回信息或不返回信息,或只執(zhí)行一個動作。如:
CREATE procedure proc2
@m1 smallint,
@m2 smallint
@result int OUTPUT
as
select @result=@m1*@m2
該存儲過程有二個輸入?yún)?shù)@m1、@m2,還有一個輸出參數(shù)@result。
按照創(chuàng)建存儲過程的時機來劃分,創(chuàng)建存儲過程也有二種方式,一是利用MS SQL Server的Enterprise Manager中的SQL Server Query Analyzer工具,此方法較簡單,只要輸入存儲過程語句并保存即可。
創(chuàng)建存儲過程的另一種方式是利用Delphi的控件,如TQuery、TADOQuery,通過使用SQL語句在運行時動態(tài)地創(chuàng)建存儲過程。如下例所示。
with query1 do
begin
paramcheck := false;
with SQL do
begin
clear;
add('create procedure proc1');
add('@dw char(20)');
add('as');
add('select dwdm from cchdwdm where dw=@dw');
end
execsql;
end;
三、存儲過程的參數(shù)
存儲過程一般有四種參數(shù)類型:
輸入?yún)?shù),由客戶程序向存儲過程傳遞
輸出參數(shù),由存儲過程向客戶傳遞
輸入/輸出參數(shù),可雙向傳遞
狀態(tài)參數(shù),由存儲過程向客戶返回錯誤信息
通過使用Delphi控件TADOStoredProc或TStoredProc來設(shè)置或獲取存儲過程的參數(shù),如:
ADOStoredProc1.parameters.parambyname('@name').value:='張三';
四、在Delphi中使用存儲過程的方法
在Delphi中使用存儲過程有以下幾個步驟:
1、把TADOStoredProc或TStoredProc放到窗體上。
2、設(shè)置參數(shù)連接到MS SQL Server數(shù)據(jù)庫。
3、設(shè)置ProcedureName參數(shù),指定存儲過程名,也可以在程序運行期設(shè)置。
4、單擊TParameters邊上的省略號按鈕,如果設(shè)置正確,則可看到所有的輸入輸出參數(shù)。
5、在代碼中設(shè)置存儲過程的輸入?yún)?shù)、執(zhí)行存儲過程并獲取返回的數(shù)據(jù)。
通過調(diào)用TADOStoredProc控件的parambyname方法,設(shè)置好所有的輸入?yún)?shù),再調(diào)用open方法執(zhí)行存儲過程。如果存儲過程返回參數(shù),同樣用parambyname方法獲取參數(shù)值,如果返回數(shù)據(jù)集,則用訪問數(shù)據(jù)集的TFields的方法獲取各記錄。如以下代碼所示:
ADOStoredProc1.close;
ADOStoredProc1.parameters.parambyname('@dwmc').value:='某某單位';
ADOStoredProc1.prepared:=true;
ADOStoredProc1.open;
label1.caption:= ADOStoredProc1.fields[0].asstring;