乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Delphi與SQL Server存儲過程編程詳解

       容心居 2020-02-07
       Delphi與SQL Server存儲過程編程詳解

       



      前言  
          經(jīng)常有很多初學(xué)者問到在delphi中如何調(diào)用SQL Server的存儲過程?問題其實很好解決,但問得多了,也就不愿答了。下面我將用實例進行說明,從在SQL Server中創(chuàng)建存儲過程到調(diào)用的完整實例。 
       
          首先,打開sql server管理器,在pubs數(shù)據(jù)庫中建一個測試表,表名為test,字段有id,name,和desc,全部為字符型,如果你不知道建表,那么打開sql查詢分析器,貼上以下的代碼,然后按執(zhí)行,就會自動生成test表. 
      use pubs 
      if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[test]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) 
      drop table [dbo].[test] 
      GO 
       
      CREATE TABLE [dbo].[test] ( 
       [id] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL , 
       [name] [char] (12) COLLATE Chinese_PRC_CI_AS NULL , 
       [descrip] [char] (30) COLLATE Chinese_PRC_CI_AS NULL  
      ) ON [PRIMARY] 
      GO 
       
              然后,我們來創(chuàng)建一個存儲過程,其功能為在test中插入一條新記錄.創(chuàng)建存儲過程的代碼如下,同樣的,你也可以復(fù)制到查詢分析器里直接執(zhí)行就可以: 
      CREATE PROCEDURE myInsert  
      @id char(10) , 
      @name varchar(12),  
      @descrip varchar(30) 
       
      AS 
      begin 
       
      insert into test (id,name,descrip) values (@id,@name,@descrip) 
       
      if @@rowcount=0 
      begin 
        raiserror('error',16,1) 
        rollback transaction 
      end 
      end 
      GO 
       
              接下來,新建一個工程文件,在form1上放置如下控件,并設(shè)置屬性(括號內(nèi)): 
      一個ADOConnection1: TADOConnection; 
            (LoginPrompt:=false; 
             connectionstring:=Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Initial Catalog=pubs;Data Source=(local);) 

      一個ADOStoredProc1: TADOStoredProc;屬性為: 
            (connection:=adoconnection1; 
             procedurename:=myinsert;//上面我們創(chuàng)建的那個) 

      一個ADOTable1: TADOTable;屬性為: 
            (connection:=adoconnection1; 
            tablename:=test;    //上面我們創(chuàng)建的那個) 

      一個Datasource1,屬性為: 
           (dataset:=Tadotable;) 

      一個 DBGrid1: TDBGrid;屬性為 
           (datasource:=datasource1;) 

      一個Button1,在其Onclick中寫到: 
        with adoStoredproc1 do 
        begin 
          Parameters.ParamByName('@id').Value := '2'; 
          parameters.ParamByName('@name').Value := 'myname'; 
          parameters.ParamByName('@descrip').Value :='nosubject'; 
          ExecProc; 
        end; 
        Adotable1.Close; 
        adotable1.Open; 
       
      delphi調(diào)用sql存儲過程,并獲取結(jié)果 
      adostoredproc1.Close; 
      adostoredproc1.ProcedureName:=’sp_thchl’; 
      adostoredproc1.Parameters.Clear;
       adostoredproc1.Parameters.CreateParameter(’out’,ftInteger,pdoutput,1,1); 
      adostoredproc1.ExecProc; 
      edit1.Text :=adostoredproc1.Parameters[0].Value;

       

      Delphi、MS SQL Server開發(fā)環(huán)境下存儲過程的使用     
      一、概述
      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;

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多