在Delphi中如何獲得SQL中儲存過程的返回值

2021-09-08 20:44:14 字數 4289 閱讀 7273

示例儲存過程:

create procedure proc_login

username varchar(20),

password varchar(20)

asdeclare @result int

select @result=count(*) from loginuser where user=@username and pass=@password

if @result=0

return 0

return 1

godelphi**:

var ret:integer;

......

with adostoredproc1 do

begin

close;

procedurename:='proc_login';

parameters.clear;

parameters.refresh;

parameters.parambyname('@username').value:= edit1.text;

parameters.parambyname('@password').value:= edit2.text;

execproc;

ret:= parameters.parambyname('@return_value').value;

end;

if ret=1 //使用者名稱密碼匹配

begin

//你想要的操作

end示例二

在delphi中取儲存過程的返回值

close;

sql.clear;

sql.text:='declare @returncount int exec pr_selstockhead '''+stockno+''',@returncount output select @returncount';

open;

countno:=fields[0].value;

cxtxtdtnamecshyh.text:=inttostr(countno);

在sql語句裡面 如果有返回值的話,可以是用return 返回,,其他的都是引數返回,如果取引數的話 從 parameters[1].value 開始,如果取return 的返回值 要用parameters[0].value

呼叫儲存過程的方法,用adodataset控制項

function tfrmpower_cut.hasnewpowercutinfo: boolean;

begin

result := false;

with sppower_cut do //sppower_cut為tadostoredproc控制項

begin

close;

procedurename := 'p_has_powercut_info';

with parameters do

begin

clear;

refresh;

parambyname('@biggestid').direction := pdinputoutput;

parambyname('@biggestid').value := fpower_cut_id_refresh;

parambyname('@noprocess').direction := pdinputoutput;

parambyname('@noprocess').value := fnoprocess;

parambyname('@ispasstimeandnoproc').direction := pdinputoutput;

parambyname('@ispasstimeandnoproc').value := fispasstimeandnoproc;

parambyname('@isnearesttime').direction := pdinputoutput;

parambyname('@isnearesttime').value := fisnearesttime;

parambyname('@isdelete').direction := pdinputoutput;

parambyname('@isdelete').value := fisnearesttime;

parambyname('@hour').value := 3;

end;

prepared;

tryexecproc;

if parameters[0].value <> fpower_cut_id_refresh then

begin

fpower_cut_id_refresh := parameters[1].value;

result := true;

end;

if parameters[2].value <> fnoprocess then

begin

fnoprocess := parameters[2].value;

result := true;

end;

if parameters[3].value <> fispasstimeandnoproc then

begin

fispasstimeandnoproc := parameters[3].value;

result := true;

end;

if parameters[4].value <> fisnearesttime then

begin

fisnearesttime := parameters[4].value;

result := true;

end;

if parameters[5].value <> fisdelete then

begin

fisdelete := parameters[5].value;

result := true;

end;

except

on e: exception do

showmessage(e.message);

end;

end;

end;

儲存過程

/*功能: 判斷資料庫內是否有新的呼叫中心停電資訊

引數: @biggestid 客戶端最大的記錄id,如果小於當前表中的id,則返回最大的id,客戶端據此判斷是否重新整理

返回值: 無

*/alter procedure p_has_powercut_info @biggestid bigint=0 output, @noprocess int=0 output,

@ispasstimeandnoproc int=0 output, @isnearesttime int=0 output, @isdelete int=0 output, @hour int=3 as

begin

declare @tmp_id bigint,@tmp_noprocess int

select @tmp_id=power_cut_id from power_cut

if (@@error=0) and (@@rowcount>0)

if @tmp_id>@biggestid

set @biggestid=@tmp_id

select @tmp_noprocess=count(*) from power_cut where pc_proctype=0

if (@@error=0) and (@@rowcount>0)

set @noprocess=@tmp_noprocess

--超過傳送時間未處理

select @ispasstimeandnoproc=count(case when (getdate()>pc_starttime and pc_proctype=0) then 1 end) from power_cut

--距離傳送時間還有3小時未處理

select @isnearesttime=count(case when (datediff(minute, getdate(), pc_starttime)>=0 and datediff(minute, getdate(), pc_starttime)<@hour*60

and pc_proctype=0) then 1 end) from power_cut

select @isdelete=count(*) from power_cut where pc_state=2

return @biggestid

endreturn 返回的是正確或錯誤的標誌,比如 100: 成功 0: 失敗(未知原因) 1: 引數錯誤 2: .... 然後引數裡面返回具體需要的資料

delphi中如何獲得硬碟序列號

var serialnum dword a,b dword volumeserialnumber string key string begin key if getvolumeinformation pchar c nil,0,serialnum,a,b,nil,0 then volumeseri...

在Delphi中如何動態更改DBGrid的顏色

dbgrid控制項是乙個有許多使用者介面的顯示資料庫的控制項,以下的程式告訴您如何根據顯示的內容改變字型的顯示顏色。例如,如果乙個城市的人口大於200萬,我們就讓它顯示為藍色。使用的控制項事件為dbgrid.ondrawcolumecell.procedure tform1.dbgrid1drawc...

SQL 在SQL中獲得不包含時間部分的日期 續

使用convert 函式 select convert char 10 getdate 120 as date 第3個引數就是用來設定日期型別資料的顯示樣式的,下面介紹幾種樣式的引數 100 mm dd yyyy 101 mm dd yyyy 102 yyyy.mm.dd 103 dd mm yyy...