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

Delphi、MS SQL Server開發環境下存儲過程的使用

2022-06-13   來源: Delphi編程 
  概述

  Delphi + MS SQL Server是目前最為流行的管理信息系統開發環境和工具Delphi的強大數據庫操作控件極大地減輕了開發人員的工作量在這些控件中最常用的有TQueryTTableTADOQueryTADOTableTADODataSete等這些控件執行查詢操作時有一個共同的特點即將所有數據庫記錄從服務器取回客戶端再根據查詢的條件進行篩選很明顯如果有大量的數據在服務器與客戶端之間傳遞就會降低程序執行的速度影響應用程序的性能針對這種情況MS SQL Server數據庫和Delphi開發工具都提供了存儲過程來解決這類問題存儲過程是一段在服務器上執行的程序它在服務器端對數據庫記錄進行處理再把結果返回到客戶端通過使用存儲過程一方面可以利用服務器強大的計算能力和速度另一方面避免把大量的數據從服務器下載到客戶端減少網絡上傳輸量服務器只需將計算結果傳給客戶端其效率之高是非常明顯的

  創建存儲過程

  在MS SQL Server上的存儲過程可分為二類一類是類似於select 查詢用於檢索數據檢索到的數據能夠以數據集的形式返回給客戶端

CREATE procedure proc
@dw char()
as
select dwdm from cchdwdm where dw=@dw

  該存儲過程有一個輸入參數 @dwdm以數據集的形式返回結果

  另一類存儲過程是通過輸出參數返回信息或不返回信息或只執行一個動作

CREATE procedure proc
@m smallint
@m smallint
@result int OUTPUT
as
select @result=@m*@m

  該存儲過程有二個輸入參數@m@m還有一個輸出參數@result

  按照創建存儲過程的時機來劃分創建存儲過程也有二種方式一是利用MS SQL Server的Enterprise Manager中的SQL Server Query Analyzer工具此方法較簡單只要輸入存儲過程語句並保存即可

  創建存儲過程的另一種方式是利用Delphi的控件如TQueryTADOQuery通過使用SQL語句在運行時動態地創建存儲過程如下例所示

with query do
begin
paramcheck := false;
with SQL do
begin
clear;
add(create procedure proc);
add(@dw char());
add(as);
add(select dwdm from cchdwdm where dw=@dw);
end
execsql;
end;

  存儲過程的參數

  存儲過程一般有四種參數類型

  * 輸入參數由客戶程序向存儲過程傳遞
  * 輸出參數由存儲過程向客戶傳遞
  * 輸入/輸出參數可雙向傳遞
  * 狀態參數由存儲過程向客戶返回錯誤信息

  通過使用Delphi控件TADOStoredProc或TStoredProc來設置或獲取存儲過程的參數
ADOStoredProcparametersparambyname(@name)value:=張三;

  在Delphi中使用存儲過程的方法

  在Delphi中使用存儲過程有以下幾個步驟

  把TADOStoredProc或TStoredProc放到窗體上
  設置參數連接到MS SQL Server數據庫
  設置ProcedureName參數指定存儲過程名也可以在程序運行期設置
  單擊TParameters邊上的省略號按鈕如果設置正確則可看到所有的輸入輸出參數
  在代碼中設置存儲過程的輸入參數執行存儲過程並獲取返回的數據

  通過調用TADOStoredProc控件的parambyname方法設置好所有的輸入參數再調用open方法執行存儲過程如果存儲過程返回參數同樣用parambyname方法獲取參數值如果返回數據集則用訪問數據集的TFields的方法獲取各記錄如以下代碼所示

ADOStoredProcclose;
ADOStoredProcparametersparambyname(@dwmc)value:=某某單位;
ADOStoredProcprepared:=true;
ADOStoredProcopen;
labelcaption:= ADOStoredProcfields[]asstring;


From:http://tw.wingwit.com/Article/program/Delphi/201311/24981.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.