delphi儲存過程的使用

2021-05-22 22:43:01 字數 3628 閱讀 5613

摘要:delphi儲存過程的使用例項:建立儲存過程主要用sql語句create procedure來實現,並用「exec語句+儲存過程名」來執行已建立的儲存過程。

儲存過程

1.建立儲存過程

建立儲存過程主要用sql語句create procedure來實現,並用「exec語句+儲存過程名」來執行已建立的儲存過程。

本示例是用儲存過程來執行多表合併的操作。

操作步驟如下:

(1)執行delphi,在窗體中新增tadoconnection、tadoquery、tdatasource、tbutton、tedit和tdbgrid等元件。

(2)主要程式**如下:

with adoquery1 do

begin

close;

sql.clear;

sql.add('create procedure '+edit1.text);    //建立儲存過程

sql.add('as ');

sql.add('select k.學生編號,k.學生姓名,j.外語 from tb_stu as k inner join tb_mark as j on k.學生編號 = j.學生編號 where (((k.學生編號)=[j].[學生編號]))');

execsql;

sql.clear;

sql.add('exec '+edit1.text);    //執行儲存過程

open;

end;

2.對儲存過程進行加密

在建立儲存過程時,可以為儲存過程加密,這樣使用者可以隱藏儲存過程的文字,避免其他使用者在儲存過程屬性中檢視其語句,主要用with encryption選項實現。在對儲存過程加密前必須對已有的儲存過程進行刪除。

下面用儲存過程的with encryption選項來建立乙個加密儲存過程。

操作步驟如下:

(1)執行delphi,在窗體中新增tadoconnection、tadoquery、tdatasource、tbutton、tedit、tmemo和tdbgrid等元件。

(2)主要程式**如下:

with adoquery1 do

begin

close;

sql.clear;

sql.add('if exists(select name from sysobjects where name='+quotedstr(trim(edit1.text))+' and type = ''p'')');    //判斷儲存過程是否存在

sql.add('drop procedure '+trim(edit1.text));    //刪除已有的儲存過程

execsql;

close;

sql.clear;

//為儲存過程加密

sql.add('create procedure '+edit1.text+' with encryption as '+trim(memo1.text));

execsql;

end;

3.用儲存過程附加資料庫

使用儲存過程附加資料庫可以方便地將沒有連線的資料庫附加到當前伺服器上,只是在附加資料庫前先將儲存過程所在的資料庫以手動方式附加到伺服器上。附加資料庫主要用系統儲存過程sp_attach_db來實現。在儲存過程中不可以用佔位符n。

下面用儲存過程將伺服器以外的資料庫附加到伺服器上,只適用於英文資料庫名。

操作步驟如下:

(1)執行delphi,在窗體中新增tadoconnection、tadoquery、tdatasource、tbutton和tedit等元件。

(2)主要程式**如下:

建立乙個含有引數的儲存過程。

with adoquery1 do

begin

close;

sql.clear;

sql.add('create procedure '+trim(edit4.text));

sql.add('@table varchar(20),');

sql.add('@date varchar(200),');

sql.add('@log varchar(200)');

sql.add('as');

sql.add('exec sp_attach_db @dbname=@table,@filename1=@date,@filename2 =@log');

execsql;

end執行帶引數的儲存過程。

with adoquery1 do

begin

close;

sql.clear;

sql.add('if exists(select name from sysobjects where name='+quotedstr(trim(edit4.text))+' and type = ''p'')');    //判斷儲存過程是否存在

//以傳參的形式呼叫儲存過程

sql.add('exec '+trim(edit4.text)+' @table='+quotedstr(trim(edit1.text))+',@date='+quotedstr(trim(edit2.text))+ ',@log='+quotedstr(trim(edit3.text)));

execsql;

end;

4.用儲存過程備份資料庫

備份資料庫與附加資料庫所用的方法基本相同,只是備份資料庫用sql語句backup database來實現,而附加資料庫則用系統儲存過程sp_attach_db來實現。

下面利用儲存過程對伺服器上的任意資料庫進行備份。

操作步驟如下:

(1)執行delphi,在窗體中新增tadoconnection、tadoquery、tdatasource、tbutton和tedit等元件。

(2)主要程式**如下:

建立乙個含有引數的儲存過程。

with adoquery1 do

begin

close;

sql.clear;

sql.add('create procedure '+trim(edit3.text));

sql.add('@name varchar(20),');

sql.add('@way varchar(200)');

sql.add('as');

sql.add('backup database @name to disk=@way');

execsql;

showmessage('儲存過程'+edit3.text+'建立成功。');

end執行儲存過程備份資料庫。

with adoquery1 do

begin

close;

sql.clear;

sql.add('if exists(select name from sysobjects where name='+quotedstr(trim(edit3.text))+' and type = ''p'')');    //判斷儲存過程是否存在

//以傳參的形式呼叫儲存過程

sql.add('exec '+trim(edit3.text)+' @name='+trim(combobox1.text)+',@way='+quotedstr(trim(edit2.text)));

execsql;

end;

DELPHI儲存過程呼叫

網上對該問題的帖子很多,但是經常不是很全面,筆者在使用時也遇到了很多實際問題,比如引數不存在啊 型別沒有引用啊等等。下面我盡量細緻地來通過例子實現一下,如果還有不正確的地方,希望得到高手指點,有興趣的可以和我一同 zyf0808 yeah.net 首先,我們使用一種簡單的方式,即通過控制項的方式來定...

DELPHI儲存過程呼叫

首先,我們使用一種簡單的方式,即通過控制項的方式來定義儲存過程和資料來源。新建乙個單元,命名為 datamconn,在加入乙個ado單元下的adostoredproc,這裡命名為adosptempabove 再加入data access單元下的乙個datasource,這裡命名為datasource...

DELPHI如何呼叫儲存過程

第一步建立儲存過程 create proc myabc a int b int,c int output asset c a b 在sql中使用查詢分析器執行 declare a int,b int,c int set a 250 set b 40 exec myabc a,b,c output 注...